Lui*_*Sep 5 mysql sql datetime date-range query-performance
此答案建议使用大于/小于查询匹配给定日期的日期.但是我公司的一位老兵告诉我要用LIKE '2014-02-06%'
.
什么是最佳做法?一个比另一个有什么显着优势吗?
在此上下文中使用LIKE时,您(隐式且不可见)将DATE,TIMESTAMP或DATETIME列值类型转换为字符串,然后将字符串与您提到的模式进行比较.类型转换操作明确地无法使用列值上的任何索引.所有应用于WHERE子句中的列值的函数也是如此.
所以,你的同事得到的结果是正确的.但是它们比它们需要的慢得多,因为它们使用全表扫描而不是索引范围扫描.
顺便说一下,BETWEEN可以正常用于DATE列,但不适用于DATETIME或TIMESTAMP列.要从后两者中选择一天的日期,你需要
WHERE dateval >= '2014-02-06'
AND dateval < '2014-02-06' + INTERVAL 1 DAY
Run Code Online (Sandbox Code Playgroud)
问题是
WHERE dateval BETWEEN '2014-02-06' /* wrong! */
AND '2014-02-06' + INTERVAL 1 DAY
Run Code Online (Sandbox Code Playgroud)
在您想要的那天之后的当天午夜准确地获取日期值项目.两种配方都在索引上使用范围扫描,这使得它们很快.但BETWEEN可能会得到错误的结果.
归档时间: |
|
查看次数: |
292 次 |
最近记录: |