繁体   English   中英

非聚集索引(包括列)

[英]Non-clustered index including columns

假设我的表格有很多列(例如20列),并且我经常按其中之一进行搜索。 如果我为该列创建非聚集索引,那么我也应该从select语句中包括其他列以覆盖查询。

但是,如果查询是SELECT * ,我应该包括所有要索引的列怎么办? 我知道我是通过这样做来复制整个表格的,这是好事还是坏事?

索引最多/整个表通常不是一个好主意,尤其是在对表进行插入/更新/删除的情况下。 当所有所需字段都未包含在索引中时,必须使用聚簇索引进行键查找,以从表中查找行。 好的/坏的取决于您要获取的行数以及聚簇索引中有多少级-这就是为什么拥有狭窄的聚簇键(最好是int)的原因。

如果必须对表中很大一部分行进行键查找,则仅扫描整个表通常要快得多。 在您的方案中也很可能也是这种情况,因为如果没有太多的行受到影响,那么进行键查找就不会那么昂贵,因此对所有字段建立索引实际上并没有帮助。

当然,如果您的表很大,则索引所有列都可能会有所帮助,至少在理论上如此。 我什至从未考虑过这样做,但是我认为扫描整个表将是一项昂贵的操作。 当然,仅在表没有太多更新的情况下这样做,因为维护索引也会导致问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM