实用SQL: 通过向表加clusted索引重整数据库

数据|数据库|索引

--
--   ArrangeDB.SQL 重整数据库
--
--   CopyRights @2003.12.29 Digital China Management System Co., Ltd.
--
-- 重整流程:把所有用户表增加 clustered 索引,这样SQL SERVER会重整表,然后
-- 再删除索引
--
-- 使用时机:日常维护,建议每周做一次重整。
--
-- 注意事项:做完后请做数据库收缩,更新统计,重新索引,及完整性检查 

--drop table #dcms_index_info
--要用到的临时表
create table #dcms_index_info
(
  index_name sysname,
  index_description varchar(210),
  index_keys varchar(2078)
)

--设置环境
set NOCOUNT ON
--程序开始:变量
declare @sql varchar(500)
declare @TableName varchar(20)
declare @ErrorSave int

--用所有的用户表处理
declare Cursor1 Cursor
for
 select name from sysobjects where xtype='U' order by name

open Cursor1
fetch next from Cursor1 into @TableName

while @@fetch_status = 0
begin
 --为了检测表中是不是有CREATE_DATE这个列,易飞的表中都有,如果没有就跳过,不过处理
 --应该还有更好的方法,我暂时这样用了。不想用sp_columns因为不想建表,慢就慢点吧
 if COLUMNPROPERTY(OBJECT_ID(@TableName),'CREATE_DATE','PRECISION') is not null
 begin
  print 'process table ' + @TableName

  --取得当前表的索引信息
  delete #dcms_index_info
  set @sql = ' sp_helpindex ''' + @TableName + ''' '
  insert into #dcms_index_info exec (@sql)

  --查找是不是已经有聚簇索引(clustered),如果已经有了就不做,在易飞中有clustered索引是少数
  select index_name from #dcms_index_info where index_description like 'clustered%'

  if @@ROWCOUNT = 0
  begin
   set @sql = ' create clustered index DcTempIndex001 on ' + @TableName + ' ( CREATE_DATE ) '
   exec (@sql)

   set @sql = ' DROP index ' + @TableName + '.DcTempIndex001 '
   exec (@sql)
  end
 end

 fetch next from Cursor1 into @TableName
end
 
drop table #dcms_index_info
close Cursor1
deallocate Cursor1

时间: 2024-11-08 17:49:34

实用SQL: 通过向表加clusted索引重整数据库的相关文章

数据泵对已经存在的表加载索引 imp 和impdp

这里探讨了使用imp 和impdp对含有索引的表的导入的一点差别. 使用imp可以在表存在的情况下,不删除表,且导入表的数据和索引. 1)创建实验表cust(已存在) SQL> conn scott/yang已连接.SQL> select * from cust;         ID CUTNAME                                                              ---------- ----------               

Oracle数据泵如何对已经存在的表加载索引

一个朋友提到一个数据泵导入的问题,在表存在的情况下,不删除表,且导入表的数据和索引. 其实这个任务对于imp很简单,因为imp的工作方式就是如此. SQL> CREATE TABLE T_EXP 2  (ID NUMBER, NAME VARCHAR2(30)); 表已创建. SQL> CREATE INDEX IND_T_EXP_ID 2  ON T_EXP(ID); 索引已创建. SQL> INSERT INTO T_EXP 2  SELECT ROWNUM, TNAME 3  FR

表中已存在接近1亿条数据了,现在想给某个字段加个索引

问题描述 用什么方式去加会比较快? 解决方案 解决方案二: 你用的频率比较多的字段加上索引解决方案三: 建个新表,建好索引,导入数据,rename表名解决方案四: oracle的话,可以用parallel关键字createindexindex_nameontable_name(column_name)tablespacetablespace_nameparallel12解决方案五: 表如果有主键的话,主键列上自带唯一索引的,如果还有其它常用的作为查询条件的列,也可以建索引.解决方案六: 直接创建

error 1089-MySQL中在创建表的时候创建组合索引,为什么我加了索引长度后就提示错误呢?

问题描述 MySQL中在创建表的时候创建组合索引,为什么我加了索引长度后就提示错误呢? 这是在创建表的同时创建了组合索引,并且添加了索引长度100,然后提示 ERROR 1089 (HY000): Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support u nique pref

删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005 .

原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005 . 删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, 使用说明 : 1,先执行脚本,将存储过程创建在数据库中 2,调用方法,以黄金搭档数据库为例 use velcromfm --数据库名, 根据具体项目替换 go declare @tableName varchar(20) set @tableName='menu' --表名 ,根据实际情况替换e

SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句

原文:SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句 BEGIN WITH tx AS ( SELECT a.object_id ,b.name AS schema_name ,a.name AS table_name ,c.name as ix_name ,c.is_unique AS ix_unique ,c.type_desc AS ix_type_desc ,d.index_column_id ,d.is_included_column ,e.name AS co

跟益达学Solr5之增量索引MySQL数据库表数据

   Solr5中如何增量索引MySQL数据库表中的数据,这个问题之前有某个童鞋问过我,今天午休时间就腾空更新篇博客,希望能帮助到你们.        为了测试方便,我首先从京东网站弄了点测试数据,如图:    这里要声明下,我不是在给京东商城打广告哈,仅仅是随便找个网站弄点测试数据,这部分工作全是我无聊手动插入MySQL数据库中的,如图:  建表SQL以及测试数据,我待会儿会上传到底下的附件里.然后你需要在solrconfig.xml配置文件中启用全量导入和增量导入请求处理器,如图:  然后分

总结:如何使用redis缓存加索引处理数据库百万级并发

前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据,这里不再细说.我大概的做法是这样的,编码使用多线程访问我的数据库,在访问数据库前先访问redis缓存没有的话在去查询数据库,需要注意的是redis最大连接数最好设置为300,不然会出现很多报错. 贴一下代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1

SQL Server 性能优化之——重复索引

原文 http://www.cnblogs.com/BoyceYang/archive/2013/06/16/3139006.html 阅读导航 1. 概述 2. 什么是重复索引 3. 查找重复索引 4. 删除重复索引 5. 总结   1. 概述 很多人都知道索引在数据库上的是有利有弊的.像其他主流商业数据库一样SQL Server允许在一个列上重复创建索引.因为SQL Server没有限制创建重复索引的数量,只是限制数据库的一个表上最多可以创建999重复索引,所以这就增加了数据库中存在重复索引