所以,情况是 - 在下面的查询中,两个表之间存在 JOIN。
SELECT saza.required_impressions as required_impressions, saza.requested_impressions as allocated_impressions, SUM(ahs.impressions) as delivered_impressions, saza.zone_id as zone_id
FROM ox_data_summary_ad_zone_assoc as saza
INNER JOIN ox_data_summary_ad_hourly as ahs
ON saza.ad_id = ahs.ad_id AND saza.zone_id = ahs.zone_id
WHERE saza.ad_id = 18867 AND DATE_FORMAT(saza.interval_start, '%Y-%m-%d') = '2015-12-21'
GROUP BY saza.zone_id
ORDER BY saza.zone_id;
- 每个表都保存着大量数据(每个表大约 167,334,535 行)。
- 如果您观察,
WHERE
子句中使用了DATE_FORMAT()
函数。因此,表数据将与该值进行比较。 - 此查询需要近 16 分钟才能完成执行。
我的问题,
1. 如果我使用 LIKE '2015-12-21%'
而不是 DATE_FORMAT()
,会有什么性能差异?
2. 还有其他更好的方法可以编写此查询吗?
最佳答案
感谢大家的支持。
我发现,由于我查询的表非常大,因此无论使用 Between
还是 LIKE
运算符,都会花费相同的时间。
最后,我通过查询 24 次每小时数据并将数据合并到我的应用程序逻辑中的日数组解决了这个问题。就我而言,是 PHP。
这是比较 -
使用BETWEEN
或LIKE
运算符进行一天的数据查询 -
查询响应时间:约 16 分钟。
使用BETWEEN
或LIKE
运算符进行一小时的数据查询 -
1 小时的查询响应时间:2 秒 * 24 小时 = 约 48 秒。
希望这至少能帮助某人。
关于mysql - MySQL 中的 DATE_FORMAT 与 LIKE 性能比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718002/