【问题标题】:optimizing Query with datediff() in mysql在 mysql 中使用 datediff() 优化查询
【发布时间】:2013-03-21 03:02:09
【问题描述】:

我有如下查询

select 
id,name,baseid,member_card_type,membercard_num,last_draw,counter 
from details_dest
where datediff(curdate(),basedate)<100;

我已经使用了解释,发现它使用的是基于基础的索引,我认为 date_diff 是问题

所以请建议我有没有其他方法可以在没有任何功能的情况下执行它

请根据性能告诉我 datediff() 或 to_days() 哪个更好

我正在使用 mysql 5.5

【问题讨论】:

    标签: mysql optimization query-optimization database-administration


    【解决方案1】:

    我建议以下查询:

    select 
    id,name,baseid,member_card_type,membercard_num,last_draw,counter 
    from details_dest
    where basedate > (curdate() - INTERVAL 100 DAY);
    

    【讨论】:

    • 感谢它工作得又快又好......请告诉我为什么 datadiff() 函数很慢,还有像 datediff() 这样的任何其他函数会降低性能...... .
    • 我认为您的查询速度慢的原因不是 datediff,而是 datediff 的使用方式。 datediff(curdate(),basedate)&lt;100 :: 这里 db 不知道有多少行这个条件为真,并且必须运行 datediff 以获取每行中的基础值。而在basedate &gt; (curdate() - INTERVAL 100 DAY):: RHS 中计算一次,因为它是一个常数,并且由于 basedate 是一个索引列,所以只处理那些满足条件的行,因此它更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2014-07-31
    • 2011-12-15
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多