有几件事情可以做,以优化此查询。
在查询方面:
避免调用上潜在的索引列功能 - 因为它不会让MySQL使用索引该列。以下条件:
DATE_FORMAT(today_end_date,'%Y-%m-%d')='2017-05-05'
可以被修饰以这一个,以避免使用索引列上的所述DATE_FORMAT功能,而是仅使用功能上的恒定值:
today_end_date >= DATE('2017-05-05') AND today_end_date < (DATE('2017-05-05') + INTERVAL 1 DAY)
====
请勿在查询中使用OFFSET值 - 您可以使用faster pagination with offset in MySQL的替代方法,而不是LIMIT X,Y。
===
避免选择不使用的列 - 在大多数情况下,选择使用“*”操作符会导致性能问题,因为你获取更多的信息比实际需要的所有列。考虑在结果集中实际需要哪些列并获取它们。
===
使用数值在适当的时候 - 当数字列比较字符串,你迫使MySQL来从数转换列的值,每行一个字符串,然后才执行比较。因此,在条件today_end = '1',如果today_end数值列,所述条件应该是:
today_end = 1
代替:
today_end = '1'
===
此外,如果你可以提供模式结构,这将有可能为这种情况推荐适当的索引。
顺便说一句,我得到了online MySQL query optimizer的建议,所以请随时输入您的查询和架构,并获得索引建议。
https://tools.percona.com/query-advisor/PTBJITIG/advise粘贴查询这里得到一些整体的想法和优化技巧 – Ognj3n