索引的mysql查询使用1比使用0性能更好

kmpatx3s  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(331)

我有以下问题在哪里 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 已设置

pxq42qpu

pxq42qpu1#

您的查询不能使用索引进行排序。因此,查询的性能将由匹配 where 条件。大概有更多的物品 IsCompleted = 0IsCompleted = 1 .
此查询的更好索引是 (groupingId, isCompleted, date) . 前两个键可以是任意顺序。
这种情况:

((t.Date >= @StartDate AND t.Date < @EndDate) OR (t.Date < @TimeNow))

也有点奇怪。我希望大多数或所有的约会都是过去的。假设 @TimeNow 表示类似于当前日期的内容,这将返回所有行。

相关问题