我有以下问题在哪里 Date
具有数据类型 non-nullable date-time
, GroupingId
具有数据类型 non-nullable int
以及 IsCompleted
具有数据类型 non-nullable tinyint(1)
.
SELECT
*
FROM
Table
WHERE
Date < @TimeNow
AND
GroupingId = @GroupingId
AND
IsCompleted = 0;
我在这张table上有一个索引 GroupingId
, Date
, IsCompleted
按这个顺序。
出于某种原因,如果我用 t.IsCompleted = 0
,它的执行速度比 t.IsCompleted = 1
每一次。
我在想,它可能没有索引有效,但可以做一些帮助。
编辑
我已经更新了示例查询,使其更加清晰。什么时候 IsCompleted = 0
设置时,它返回的行数要少得多,所需时间要比设置时长得多 IsCompleted = 1
已设置
1条答案
按热度按时间pxq42qpu1#
您的查询不能使用索引进行排序。因此,查询的性能将由匹配
where
条件。大概有更多的物品IsCompleted = 0
比IsCompleted = 1
.此查询的更好索引是
(groupingId, isCompleted, date)
. 前两个键可以是任意顺序。这种情况:
也有点奇怪。我希望大多数或所有的约会都是过去的。假设
@TimeNow
表示类似于当前日期的内容,这将返回所有行。