哪个在MySQL where子句中表现更好:YEAR()vs BETWEEN?

前端之家收集整理的这篇文章主要介绍了哪个在MySQL where子句中表现更好:YEAR()vs BETWEEN?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要从MySQL数据库中查找给定年份中创建的所有记录.以下任何一种方法是否会比另一方慢?@H_502_2@

@H_502_2@

WHERE create_date BETWEEN '2009-01-01 00:00:00' AND '2009-12-31 23:59:59'

要么@H_502_2@

@H_502_2@

WHERE YEAR(create_date) = '2009'
最佳答案
无论何时对列使用函数,它都必须在每一行上执行该函数,以查看它是否与常量匹配.这可以防止使用索引.@H_502_2@

因此,基本的经验法则是避免使用比较左侧的函数.@H_502_2@

Sargable意味着DBMS可以使用索引.使用左侧的列和右侧的常量以允许DBMS使用索引.@H_502_2@

即使您在create_date列上没有索引,DBMS仍然会为每行运行YEAR()函数.所以,无论如何,第一种方法最有可能更快.@H_502_2@

猜你在找的MySQL相关文章