代码之家  ›  专栏  ›  技术社区  ›  andrewm

索引mysql查询使用1比使用0执行得更好

  •  0
  • andrewm  · 技术社区  · 8 年前

    我有以下疑问 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;
    

    我在这张桌子上有一个索引 分组ID 我是说, 日期 ,请 未完成 按顺序。

    出于某种原因,如果我使用 t.IsCompleted = 0 ,它的性能比 t.IsCompleted = 1 每一次。

    我认为它可能没有被有效地索引,但可以在它上做一些帮助。

    编辑

    我已经更新了示例查询,使其更加清晰。什么时候? IsCompleted = 0 设置后,它返回的行数远少于 IsCompleted = 1 已设置

    1 回复  |  直到 8 年前
        1
  •  1
  •   Gordon Linoff    8 年前

    查询无法使用索引进行排序。因此,查询的性能将由与 where 条件。据推测,更多的物品 IsCompleted = 0 IsCompleted = 1 是的。

    此查询的更好索引是 (groupingId, isCompleted, date) 是的。前两个键可以按任意顺序排列。

    这种情况:

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

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