This回答建议使用大于/小于查询匹配给定日期的日期。但我公司的一位资深人士告诉我使用LIKE '2014-02-06%'
。
最佳做法是什么?一个人有没有明显的优势吗?
答案 0 :(得分:5)
在此上下文中使用LIKE时,您(隐式且不可见)将DATE,TIMESTAMP或DATETIME列值类型转换为字符串,然后将字符串与您提到的模式进行比较。类型转换操作明确地无法使用列值上的任何索引。所有应用于WHERE子句中的列值的函数也是如此。
所以,你的同事得到的结果是正确的。但是他们比他们需要的慢得多,因为他们使用全表扫描而不是index range scan。
顺便说一下,BETWEEN可以正常用于DATE列,但不适用于DATETIME或TIMESTAMP列。要从后两者中选择一天的日期,您需要
WHERE dateval >= '2014-02-06'
AND dateval < '2014-02-06' + INTERVAL 1 DAY
问题在于
WHERE dateval BETWEEN '2014-02-06' /* wrong! */
AND '2014-02-06' + INTERVAL 1 DAY
在您想要的那天之后的当天午夜准确地获取日期值项目。两种配方都在索引上使用范围扫描,这使得它们很快。但BETWEEN可能会得到错误的结果。
答案 1 :(得分:2)
如果您在日期字段上使用LIKE
进行查询,它将计算所有日期的日期的字符串表示,这不是一个好主意。但是如果使用BETWEEEN
运算符,它只会将时间戳的int值与存储数据进行比较。