运行顾问程序它建议我应该在Path
,Value
上创建一个索引并包含Id
。
Path varchar(250)
Value bigint
Id uniqueidentifier
在查询中使用索引时,在索引中使用Id
而不是包含它会更快吗?
将Id
作为包含而不是在索引中插入会慢吗?
答案 0 :(得分:2)
1)如果你对ID可以解决的ID进行操作(例如与它进行比较),那么将它放在索引中而不是只包含它可以使查询更快。
2)不,如果有的话,它可能会更快一点,并且可能导致索引中的碎片更少,而不是作为索引的一部分,因为服务器不必对包含的列进行排序以将它们放入索引存储。
如果所有必需的列都存储在索引数据中,则查询运行得最快。包含列只会这样:向索引添加更多数据而不实际索引它,因此不需要通过PK进行查找来获取数据。
答案 1 :(得分:1)
1)取决于查询是否为
select Id
from YourTable
WHERE Path = x and Value = y and Id =(or>, <, between etc.) z
即。 - 如果查询涉及Path和Value的精确值(不是范围) - 那么是,否则 - 否,因为非叶子行更厚而会慢一些
INCLUDE
部分中保存ID,则会有一点收益 - 因为无需将其保存在非叶页上你注意到了:
查询使用Id,Path和Value。加入限制和中的Id和路径 价值在哪里。 Id还是主表上的FK。有了这个 简短信息,您将如何设计索引?
因此,更好包含索引中的所有行,列的最佳顺序将取决于JOIN
中其他表的结构/索引。
索引应该看起来像(Value, Id, Path)
或(Value, Path, Id)
- 取决于上面提到的。