假设我有一个索引Foo
:
Keys [A, B, C] and Included columns (D, E)
是否有任何性能原因需要附加索引Bar
:
Keys [A, B] and Included columns (C, D, E)
我的假设是最后一个不需要的键将被视为与包含的列相同。
假设我有一个索引Foo
:
Keys [A, B, C] and Included columns (D, E)
是否有任何性能原因需要附加索引Bar
:
Keys [A, B] and Included columns (C, D, E)
我的假设是最后一个不需要的键将被视为与包含的列相同。
IMO,首先我们必须了解
正如我们所知,优化器制定成本基础查询计划。如果查询计划不是
Trivial
,Simple
那么它必须是Cost based Optimization
。例子,
在我的示例中,索引大小
nc1_ABC
将超过nc2_AB
. 为什么 ?所以,如果我的查询是,
优化器将选择
nc1_ABC
索引。它不会使用nc2_AB
.但如果我的查询是
优化器会选择
nc2_AB
. 为什么 ?因为优化器会比较选择的价格,
nc2_AB
而nc1_ABC
.Optmizer 会看到它必须根据过滤器 A 和 B 找到所有记录,即可以同时使用两个索引,但索引大小nc2_AB
小于nc1_ABC
.所以它将被使用。因此,这取决于示例以及查询的使用频率以及快速获取这些记录的重要性。
如果所有这些都正确,则
additional index Bar
需要,否则index Foo
对于两个查询都足够好。这真的取决于例子和情况。