数据库
首页 > 数据库> > MySQL:使用LIKE或MONTH过滤日期列?

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