我是否通过选择使用聚簇索引来销毁我的数据库?

时间:2015-11-16 02:34:29

标签: sql-server

我知道每篇关于索引的文章都说,对于聚簇索引,您只应在一个被查询大量使用的列上创建聚簇索引。通常,我的表有一个整数标识主键列,我设置了聚簇索引,但我不必在我在此表上执行的所有查询中引用此列。因此,我是否注定了整个数据库的销毁情况,因为我在这个整数身份主键列上有一个聚集索引但是我没有在100%的所有查询中引用这个主键列?

我很抱歉,如果我在这里听起来很戏剧性,但有时文章听起来就像情况一样,如果我的查询不是百分之百的时间引用表中的特定列,那么绝对不要设置此表上的聚簇索引或您将受到数据库性能缓慢的诅咒。

我真的需要一些实用的建议,因为我之前创建的数据库似乎运行得非常快,但是我感到很紧张,当我设计这些表时,我选择在整数身份主键列上放置聚簇索引这些表格。我担心有一天这个数据库会停止工作,而这一切都将因为我过去决定为每个表使用聚集索引。

但是,让我问你一下 - 我只是不明白撰写这些文章的人在哪里工作。比如,哪个表总是有一个特定的列在每个查询中引用过,而这些查询曾经在表上运行过?我真的不总是在工作中看到那种情况。我只是不知道该怎么做 - 在阅读这些文章之后,我曾经非常紧张地思考过去几天我可能犯的错误。请告诉我,由于过去的无知,我没有毁掉这个数据库。

1 个答案:

答案 0 :(得分:1)

首先,Clustered Index是告诉数据库将数据物理存储在按集群索引中的列排序的表中。聚集索引几乎总是表的主键列(我可能错误的几乎是部分)。因此,缓慢的操作是INSERTS / UPDATE,因为系统必须找到正确的位置来物理地放置新的/更新的记录,然后必须通过从插入发生的位置向下推送其他所有内容来重新定位现有记录。

创建聚簇索引并不意味着你注定要失败,除非你做了很多插入/更新,改变了主键列的值,这意味着必要时重新排序记录。

标识键列上的主键(聚簇索引)很好,因为此列由系统控制,并且在创建记录后几乎不会更改。(您正在做出正确的选择)。

如果发现查询速度很慢,则可以始终在查询中使用的列上创建非聚集索引。在非聚集索引中,排序记录通过引用存储,因此INSERT / UPDATE对数据库没有很大影响。