gpt4 book ai didi

sql - 索引中列的顺序有多重要?

转载 作者:行者123 更新时间:2023-12-01 16:36:19 25 4
gpt4 key购买 nike

我听说您应该将最具选择性的列放在索引声明的开头。示例:

CREATE NONCLUSTERED INDEX MyINDX on Table1
(
MostSelective,
SecondMost,
Least
)

首先,我说的对吗?如果是这样,通过重新排列索引中列的顺序,我是否可能会看到性能上的巨大差异,或者这更像是一种“不错的做法”?

我问这个问题的原因是因为在通过 DTA 进行查询后,它建议我创建一个索引,其中几乎所有列都与现有索引相同,只是顺序不同。我正在考虑将缺失的列添加到现有索引中并称其为良好。想法?

最佳答案

看看这样的索引:

Cols
1 2 3
-------------
| | 1 | |
| A |---| |
| | 2 | |
|---|---| |
| | | |
| | 1 | 9 |
| B | | |
| |---| |
| | 2 | |
| |---| |
| | 3 | |
|---|---| |

看看如何首先限制 A,因为您的第一列比首先限制第二列消除了更多的结果?如果你想象一下索引必须如何遍历,第 1 列,然后是第 2 列,等等,那就更容易了……你会发现在第一次遍历中删除大部分结果会使第二步更快。

另一种情况,如果您查询第 3 列,优化器甚至不会使用索引,因为它对于缩小结果集的范围没有任何帮助。 任何时候进行查询时,在下一步之前缩小要处理的结果数量意味着更好的性能。

由于索引也是以这种方式存储的,因此当您查询第一列时,无需回溯索引来查找第一列。

简而言之:不,这不是为了展示,而是有真正的性能优势。

关于sql - 索引中列的顺序有多重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com