【发布时间】:2014-02-10 03:10:55
【问题描述】:
我正在尝试优化以下查询,因为它需要很长时间才能执行。任何人都可以就如何优化这一点提供任何建议,并且他们可以推荐任何可以加快速度的索引。作为注释,eddata 表包含大约 100 万行,ddata 表包含大约 1500 万行。如果您运行查询,则从 ddata 中选择了大约 5,000 个项目
SELECT * FROM ddata WHERE DATE(startDate) = DATE(NOW());
我要优化的查询是:
SELECT e.ID,e.uID,e.sID
FROM edata e
LEFT JOIN ddata d ON e.sID=d.sID
WHERE DATE(d.startDate)=DATE(NOW());
谢谢
【问题讨论】:
-
索引的基本经验法则:比较操作中使用的任何字段都应该有一个索引。这就是你的
where、join和有时order子句中使用的任何东西。请注意,如果您在比较中使用从该字段派生的值,则在字段上设置索引没有任何用处,就像您使用 DATE() 调用一样。startDate可能会被索引,但像md5(somefield)这样的东西会强制进行表扫描。 -
顺便说一句,使用 NOW() 意味着查询不会进入查询缓存——如果你用字符串预填充它,那么重复运行会更快。
-
我会运行 EXPLAIN 语句 dev.mysql.com/doc/refman/5.0/en/explain.html 来向您显示有关查询的信息。您能否发布结果,以便我们给出相关答案。
-
去掉LEFT JOIN,因为结果和INNER JOIN一样。你想达到什么目的?
标签: mysql sql optimization