我正在尝试查询BETWEEN日期,但问题是列在VARCHAR中,日期为“yyyymmddhhmmss”。性能低迷,我不知道我能做些什么来优化它。如果有人能指出我下一步要做的话会很棒。
以下是代码:
SELECT `id`, `a`, `b`, `c`, `date_added`
FROM `table`
where date_added >= '201306%'
AND date_added <= '201309%'
答案 0 :(得分:2)
理想情况下,您应该使用DATETIME
或TIMESTAMP
列而不是VARCHAR
。
无论数据类型如何,您都可以通过向该列添加索引来提高性能:
ALTER TABLE `table`
ADD INDEX date_added (date_added);
就查询的语法而言,除非在查询中使用%
,否则不应使用LIKE
通配符。例如,要获取6月到9月的所有日期:
SELECT `id`, `a`, `b`, `c`, `date_added`
FROM `table`
where date_added >= '201306'
AND date_added < '201310'
您可能还想考虑用尾随零填充这些值,使它们与yyyymmddhhmmss格式匹配。
例如:
SELECT `id`, `a`, `b`, `c`, `date_added`
FROM `table`
where date_added >= '20130600000000'
AND date_added < '20131000000000'
答案 1 :(得分:0)
将date_added
转换为datetime
字段,您的所有困境都会消失。
您需要将UPDATE
SQL语句分两步执行到新字段中,然后将字段从date_added_nonstring
重命名为date_added
。