Cre*_*ian 4 index sql-server t-sql index-tuning
我目前正在检查我们数据仓库中的所有索引作为性能调整练习。其中一些索引未在系统统计中使用,我正在考虑删除它们以减少批处理过程中的开销。
其中一些没有意义,因为 PK 列被用在其他索引的中间,等等。但是,我想知道 SQL Server 如何处理多列索引(具有重叠列)。
例子:
NONCLUSTERED INDEX Index1 (A, B, C)
NONCLUSTERED INDEX Index2 (A, B)
Run Code Online (Sandbox Code Playgroud)
SQL Server 是否能够将 Index1 用于与 Index2 和 Index2 不需要的行相同的行?我知道 rowID 包含在 B+tree 的叶级节点中,但是 C 的所有记录在 Index1 中都是有效的。
可以在不影响性能的情况下删除 Index2 吗?
据我所知,索引还可以帮助执行计划中的排序。Index1 也可以用于这些吗?
一般来说,您应该能够在没有任何重大问题的情况下删除 Index2。Index1 可以涵盖 Index2 当前将处理的任何查询(假设两者之间没有任何包含的列差异)。
如果 Index1 中的列 C 很大,那么对于将使用 Index2 的查询,您可能最终会使用 Index1 将更多数据读入内存,因为第三列在每页上占用更多空间,但在大多数情况下,我认为您不会会注意到任何明显的性能差异。
归档时间: |
|
查看次数: |
512 次 |
最近记录: |