【发布时间】:2015-08-17 18:20:57
【问题描述】:
我的查询中有 2 个表。我在 join 和 where 子句列上创建了一个非聚集索引,并包含了选择列表。当我运行查询并查看执行计划和统计信息 IO 时,我看到逻辑读取没有下降。将选择列表替换为选择 1 后,我发现逻辑读取显着减少。数据库是 SQL 2005 SP2。
正在使用 1 个索引(但不是包含)。另一个被完全忽略(不同的问题)。任何关于为什么我的包含被忽略的见解将不胜感激!
这是查询和索引:
SELECT
cm.col1
,cm.col2
,cm.col3
,cm.col4
,cm.col5
,cm.col6
,cp.col7
,cm.col8
,cm.col9
,cp.col10
FROM table1 cm
INNER JOIN table2 cp
ON cm.col1 = cp.col11
INNER JOIN table3 c
ON cp.col7 = C.col12
WHERE C.col13 = @Variable
and cm.col9 IN ('value1', 'value2')
创建索引 ix_table1_Includes ON 表 1 (col1, col9) 包括(col2、col3、col4、col5、col6、col8)
创建索引 ix_table2_Includes 在表 2 (col11) 包括 (col7, col10)
【问题讨论】:
-
请编辑您的帖子以包含查询和索引。你现在的问题太模糊了。
-
查询前有没有得到系统生成索引的时间?不是一蹴而就的!系统必须在后台执行搜索和 IO 以生成索引。
标签: sql-server indexing