MySQL:使用LIKE或MONTH过滤日期列?
作者:互联网
我有一个CRON任务,需要从MySQL InnoDB表中提取给定月份的生日.生日字段已编入索引且类型为DATE.
过滤四月,我可以通过以下方式查询客户表:
SELECT *
FROM customers
WHERE birthday LIKE "2015/04/%";
要么:
SELECT *
FROM customers
WHERE MONTH(birthday) = 4;
你会推荐哪一个,为什么?
解决方法:
将DATE用作类型的重点是数据库可以有效地查询数据.这与将数字存储为INT而不是VARCHAR的原因相同 – 因此引擎可以做出明智的决策.如果您在某个日期使用LIKE运算符,则会失去选择correct data type的好处.
使用MONTH(生日)允许MySQL获取它知道遵守DATE数据格式的生日列的月份部分.当你使用LIKE时,它正在进行逐个字符的模式匹配,这样做的成本更高,速度也更慢.
如果LIKE足够,则MONTH()将不存在.对于DATE查询,任何内置函数始终都是LIKE的选择.
标签:performance-tuning,mysql 来源: https://codeday.me/bug/20190806/1595430.html