我正在优化 SQL Server 2005 上的查询。我对大约有 200 万行的 mytable
有一个简单的查询:
SELECT id, num
FROM mytable
WHERE t_id = 587
id
字段是主键(聚集索引),t_id
字段上存在非聚集索引。
上述查询的查询计划包括聚集索引查找和索引查找,然后执行嵌套循环(内连接)来合并结果。 STATISTICS IO 显示 3325 页面读取。
如果我将查询更改为以下内容,则服务器仅执行 6 次页面读取和一次无连接的索引查找:
SELECT id
FROM mytable
WHERE t_id = 587
我尝试在 num
列上添加索引,并在 num
和 tid
上添加索引。服务器未选择这两个索引。
我希望减少页面读取次数,但仍检索 id
和 num
列。
最佳答案
以下索引应该是最佳的:
CREATE INDEX idx ON MyTable (t_id)
INCLUDE (num)
我不记得 INCLUDEd 列在 2005 年是否是有效语法,您可能必须使用:
CREATE INDEX idx ON MyTable (t_id, num)
[id] 列将包含在索引中,因为它是聚集键。
关于sql-server - 当数据库强制连接时,如何强制更好的执行计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56763193/