我想优化以下查询,因为它需要很长时间才能执行。任何人都可以提供关于如何优化这个建议,并且他们可以推荐任何索引来加速它。作为说明,edata表包含大约100万行,ddata表大约有1500万行。有来自DDATA选择,如果你运行查询约5000项如何优化大型表的MySQL查询
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'子句中使用的任何东西。请注意,如果您在比较中使用该字段的DERIVED值,就像使用DATE()调用一样,在字段上使用索引是没有用的。 'startDate'可能被索引,但是'md5(somefield)'会强制执行表扫描。 –
可能作为旁白,使用NOW()意味着查询不会进入查询缓存 - 如果您预先填充了字符串,那么重复运行会更快。 –
我会运行EXPLAIN语句https://dev.mysql.com/doc/refman/5.0/en/explain.html向您显示有关查询的信息。你可以发布结果,以便我们可以给出相关答案。 – Tommassiov