- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
= '2013-09-01 00:00:00'" 这-6ren">
我有一个名为x
的表与 INDEX on datetime column-> eventdate
。
当我使用时
"where eventdate >= '2013-09-01 00:00:00'"
这会导致全表扫描。我应该怎么做才能避免全表扫描。请帮忙。
最佳答案
所以您有 INDEX(eventdate)
但 where eventdate >= '2013-09-01 00:00:00'
会进行全面扫描吗?那么我猜大部分 eventdate
都大于 '2013-09-01 00:00:00'
您能给我们以下查询结果吗?
SELELCT COUNT(*) FROM x;
SELELCT COUNT(*) FROM x WHERE eventdate >= '2013-09-01 00:00:00;
EXPLAIN SELELCT COUNT(*) FROM x WHERE eventdate >= '2013-09-01 00:00:00;
MySQL 的说明如下:
http://dev.mysql.com/doc/refman/5.6/en/how-to-avoid-table-scan.html
You are using a key with low cardinality (many rows match the key value) through another column. In this case, MySQL assumes that by using the key it probably will do many key lookups and that a table scan would be faster.
OP 的评论如下。
Q1 : SELELCT COUNT(*) FROM x;
Q2 : SELECT COUNT(c.id)
FROM X c WHERE c.eventDate >= '2013-09-30 09:17:35'
GROUP BY c.msisdn
ORDER BY SUM(abc) DESC;
“Q1”和“Q2”均生成 20,000,042 行。 OP 正在询问“现在请告诉我为什么要检索所有数据”。。
正如我之前提到的,表 x 中的所有 eventData 都大于“2013-09-30 09:17:35”。这样就检索到了整个数据。如果你想要前10条记录,只需添加“LIMIT”
SELECT COUNT(c.id)
FROM X c WHERE c.eventDate >= '2013-09-30 09:17:35'
GROUP BY c.msisdn
ORDER BY SUM(abc) DESC
LIMIT 10;
你的查询正在对超过20M+行进行GROUP BY和ORDER BY,它需要很长的时间(需要多长时间?)当更多的条件添加到查询中时,它会变得越来越快。但我不知道哪个条件合适(我不知道你的数据、模式、你想要什么)
关于mysql - 为什么where子句中的大于会导致全表扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20244645/
我在尝试获取我想要的结果集时遇到了一些问题。基本上我有这两个表: phonemanager_defaults | id | tag | number | |--
我是一名优秀的程序员,十分优秀!