mysql - MySQL 中的 DATE_FORMAT 与 LIKE 性能比较

标签 mysql

所以,情况是 - 在下面的查询中,两个表之间存在 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。

这是比较 -

使用BETWEENLIKE运算符进行一天的数据查询 -

查询响应时间:约 16 分钟。

使用BETWEENLIKE运算符进行一小时的数据查询 -

1 小时的查询响应时间:2 秒 * 24 小时 = 约 48 秒。

希望这至少能帮助某人。

关于mysql - MySQL 中的 DATE_FORMAT 与 LIKE 性能比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718002/

相关文章:

MySQL触发器: INSERT ON log BEFORE DELETE ON table

mysql - MySQL 中带游标的存储过程

PHP - 如何在另一个文件中显示以表单输入的数据?

php - codeigniter数据库查询/mysql

mysql - 如何将其他表的数据添加到双单表MySQL查询中?

php - 为什么每当我执行更新 MYSQL 数据库中任何文本字段的 PHP 代码时都会添加额外的空间?

sql - 在 SQL/MySQL 中,join 语句中的 "ON"和 "WHERE"有什么区别?

php - 提交表单后,所有行均采用一个值

php - 如何在不同的表行中获取提交按钮来执行不同的SQL查询?

mysql - ubuntu16.04安装Mysql-server出错