![]() |
1
1
这里有两条一般性意见。首先,索引中的三列甚至不出现在
但第二,SQL Server甚至可能不会使用这样的索引,假设有相当均匀的null和非null记录划分
|
![]() |
2
0
您正在按UniqueSessionId进行搜索。 但该字段不在索引中。 您创建的索引仅包含ServerName、SessionId和CreatedTime。 “WHERE([UniqueSessionId]IS NULL)”只是一个条件。 您应该搜索其他列或在索引中包括UniqueSessionId,如:
编辑:如果在搜索中仅使用该字段,请为其创建另一个独占索引:
这是因为单独使用时要产生效果的字段应该是索引上的第一个字段。 |
![]() |
3
0
|
![]() |
4
0
您问题中的图片显示该表具有
您确认当前
为了设置类似的东西,我使用
我得到的执行计划
当它可以扫描时,这当然很烦人
显式索引提示确实给出了此计划(计划成本为
密钥查找也很烦人,原因如下
in the bug linked by Dan
但即使进行了密钥查找,该计划的成本仍然低于
如果索引更改为
它现在在没有任何提示的情况下自然地选择了所需的计划,这次的计划成本是
我认为这只是一个限制,它不会自然地(在没有提示的情况下)考虑第二个计划,因为当被迫考虑时,它确实会花得更便宜。 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 6 月前 |
![]() |
Marc Guillot · 记录值时忽略冲突 7 月前 |
![]() |
Fachry Dzaky · 正确使用ROW_NUMBER 7 月前 |
![]() |
TriumphTruth · 从满足特定条件的数据集中选择1行 7 月前 |