【发布时间】:2018-06-27 02:42:37
【问题描述】:
有一个 SO 问题 Error matching dates in PDO 我给出了答案并进行了一些交谈。
基本上我说过不要在日期上使用通配符:
SELECT * FROM table where datefiled LIKE '%2018-06%'
改为使用类似的东西(是的,中间也可以):
SELECT * FROM table where MONTH(datefield) = '06' and YEAR(datefield) = '2018
这导致对我的回答发表评论,说他被告知(数据超过 9000 万行):
当您在列上应用函数时,它会避免使用索引进行查找,因为它必须对索引中的所有值应用相同的函数,因此效率会降低。因此需要使用日期边界的技巧。
我对 SQL 实现的搜索算法的理解不是很好,但我知道何时使用和不使用索引(阅读与写作)。以上似乎暗示使用MONTH() 和YEAR() 函数将不如字符串LIKE 有效。如果评论是关于 BETWEEN 的,我会明白的,但我无法想象LIKE 会因为函数调用而胜出的用例。
如果可以,那是什么用例?
【问题讨论】: