首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引的MySQL查询使用1比0执行得更好。

索引的MySQL查询使用1比0执行得更好。
EN

Stack Overflow用户
提问于 2018-06-29 14:25:07
回答 1查看 33关注 0票数 0

我有以下查询:Date有数据类型的non-nullable date-timeGroupingId有数据类型的non-nullable intIsCompleted有数据类型的non-nullable tinyint(1)

代码语言:javascript
复制
SELECT
    *
FROM
    Table
WHERE
    Date < @TimeNow
AND 
    GroupingId = @GroupingId
AND 
    IsCompleted = 0;

我在这个表上有一个GroupingIdDateIsCompleted的索引。

由于某种原因,如果我使用t.IsCompleted = 0运行这个查询,它每次执行的速度都比t.IsCompleted = 1慢得多。

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

编辑

我更新了示例查询,使其更加清晰。设置IsCompleted = 0时,返回的行要比设置IsCompleted = 1时少得多,花费的时间也要长得多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 14:36:33

查询不能使用索引进行排序。因此,查询的性能将由与where条件匹配的行数驱动。想必有更多的项目有IsCompleted = 0而不是IsCompleted = 1

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

这一条件:

代码语言:javascript
复制
((t.Date >= @StartDate AND t.Date < @EndDate) OR (t.Date < @TimeNow))  

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51103904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档