在Varchar列中使用> =和%时,MySQL性能会降低

时间:2013-12-04 14:27:58

标签: mysql

我正在尝试查询BETWEEN日期,但问题是列在VARCHAR中,日期为“yyyymmddhhmmss”。性能低迷,我不知道我能做些什么来优化它。如果有人能指出我下一步要做的话会很棒。

以下是代码:

SELECT `id`, `a`, `b`, `c`, `date_added` 
FROM `table` 
where date_added >= '201306%' 
AND date_added <= '201309%'

2 个答案:

答案 0 :(得分:2)

理想情况下,您应该使用DATETIMETIMESTAMP列而不是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