站长网 MySql教程 哪个在MySQL where子句中表现更好:YEAR()vs BETWEEN?

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

我需要从MySQL数据库中查找给定年份中创建的所有记录.以下任何一种方法是否会比另一方慢? WHERE create_date BETWEEN ‘2009-01-01 00:00:00’ AND ‘2009-12-31 23:59:59’ 要么 WHERE YEAR(create_date) = ‘2009’ 最佳答案无论何时对列使用函数,它都必须在

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

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

要么

WHERE YEAR(create_date) = '2009'

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

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

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

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

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/jc/mysql/2021/0524/5247.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部