Jer*_*hka 16 sql sql-server sql-execution-plan
我在表T的A,B,C,D列上有一个索引
我有一个查询,它在WHERE子句中使用A,B,C从T中提取.
是否会使用索引或是否需要一个仅包含A,B,C的单独索引?
Kev*_*ley 11
David B是正确的,您应该检查执行计划以验证索引是否正在使用.
是否会使用索引或是否需要一个仅包含A,B,C的单独索引?
要回答问题的最后一部分,我认为这是核心的基础主题(而不是直接的解决方案),几乎没有理由索引索引列的子集.如果您的索引是(A,B,C,D),WHERE对(A,B,C)最有可能导致索引搜索,这是理想的情况 - 索引包含引擎需要的所有信息直接进入结果集.我相信这对数字类型和字符串类型中的相等测试都适用,尽管它可以与LIKE'%'分解.另一方面,如果您的WHERE仅引用了D,则很可能最终会进行索引扫描,这意味着SQL引擎必须扫描A,B和C的所有组合,然后在决定是否将行添加到结果集之前检查D是否符合您的条件.在一个特别大的表上,当我发现自己不得不对列"D"进行大量查询时,我只为D添加了一个附加索引,并且看到了大约90%的性能提升.
编辑:我还应该建议在SQL Management Studio中使用数据库引擎优化顾问.它将告诉您表是否未针对要运行的查询进行理想的索引编制.
这取决于!
WHERE A like '%x%'
and B = 1
and C = 1
//
WHERE A = 1
OR B = 1
OR C = 1
//
WHERE DateAdd(dd, 1, A) = '2008-01-01'
AND B = 1
AND C = 1
Run Code Online (Sandbox Code Playgroud)
这些不依赖于索引,因为索引没用.
单击"显示估计执行计划"以确认潜在的索引使用情况.
归档时间: |
|
查看次数: |
7223 次 |
最近记录: |