MSSQL索引优化之确定较优的聚集索引候选键

0    100    1

Tags:

👉 本文共约1791个字,系统预计阅读时间或需7分钟。

当我们创建一个表时,很难准确的知道数据会被如何访问。因此,当我们选择创建聚集索引时,自增的ID列通常是我们的首先,其使得行唯一。这可能是一个好的选择,但是,当应用开始运营,数据访问方式的统计就会被统计到,你可能需要回过头来,对你的表做出一些调整,确保你聚集索引对你的应用有益,而不是负担。本文将使用一个简单的方式,在实践中确定聚集索引的候选键。

确定聚集索引候选键

下面是我以实际应用中的一个表为例,我们使用改进的 sp_helpindex 来查看表的索引情况:

MSSQL索引优化之确定较优的聚集索引候选键

可以看到表上有四个索引,聚集索引在 [date] 列上。

为了查看这些索引的使用情况,我们使用如下脚本:

结果如下:

MSSQL索引优化之确定较优的聚集索引候选键

这是表中索引真实的使用情况。我们可以看到,几乎每次使用 ix_userid索引进行查找(50024910次)时,都会有一次键查找(50016458次),我们很容易得出结论 userid 是这个表的较优的聚集索引候选键。

修改聚集索引准备

当然,要修改聚集索引,我们需要做如下几个方面的准备:

  • 如果有依赖于源聚集索引键列的外键,先准备重建外键的脚本,然后删除掉所有外键

  • 如果聚集索引上有主键约束(创建主键时默认创建聚集索引)

    • 有主键约束的话,删除主键脚本:ALTER TABLE TableName DROP CONSTRAINT ConName
    • 否则,直接删除聚集索引 DROP INDEX ClusteredIndexName ON TableName
  • 确定索引是否进行分区,及对应的分区方案

查看引用指定表的所有外键信息脚本如下:

我们可以找到每个表的外键,使用生成脚本的方式,备份外键信息,为恢复外键准备脚本,当然,如果主键和外键都是不是组合键的情形,我们可以使用下面的脚本生成:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
MSSQL索引优化之确定较优的聚集索引候选键后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章
验证码:
请关注本站微信公众号,回复“小麦苗博客”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部