加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer中循环给多张表建立聚簇索引

发布时间:2020-12-12 14:19:38 所属栏目:MsSql教程 来源:网络整理
导读:缘由 因为在某个复(bian)杂(tai)需求中用到了170+张表进行查询,而且表中的数据过多,查起来缓慢。只能给这些表添加索引。 但是,连表名也是无法确定的(无力吐槽)。 解决方法 使用游标遍历查询出来的符合条件的表名,通过拼接sql语句进行建立索引。 代

缘由

因为在某个复(bian)杂(tai)需求中用到了170+张表进行查询,而且表中的数据过多,查起来缓慢。只能给这些表添加索引。
但是,连表名也是无法确定的(无力吐槽)。

解决方法

使用游标遍历查询出来的符合条件的表名,通过拼接sql语句进行建立索引。

代码如下:

--声明变量
DECLARE?
????@tableName?AS?VARCHAR(50)?=?‘‘,
????@SqlStr?AS?VARCHAR(MAX)?=?‘‘;

--声明游标
DECLARE?C_TableName?CURSOR?FAST_FORWARD?FOR?(
????select?name?from?sysobjects?where?xtype=‘u‘?AND?name?LIKE?‘EAR%2019‘?--读取库中的所有表名
);

OPEN?C_TableName;

--取第一条记录
FETCH?NEXT?FROM?C_TableName?INTO?@tableName;

WHILE?@@FETCH_STATUS?=?0
BEGIN
?????--组装sql语句
?????SET?@SqlStr?=?‘CREATE?INDEX?‘?+?@tableName?+?‘_called_duration‘?+?‘?ON?‘?+?@tableName?+?‘(called,duration);‘;
?????EXEC?(@SqlStr);
?????PRINT?@SqlStr;
?????--取下一条记录
?????FETCH?NEXT?FROM?C_TableName?INTO?@tableName;
END

--?关闭游标
CLOSE?C_TableName;

--?释放游标
DEALLOCATE?C_TableName;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读