【问题标题】:Mysql datetime index is not working while using 'like'使用“喜欢”时,Mysql 日期时间索引不起作用
【发布时间】:2015-06-30 01:44:03
【问题描述】:

我在 MySQL 中创建了一个表:

CREATE TABLE index_test(
   moment DATETIME,
   one_more_attr VARCHAR(10)
);
ALTER TABLE index_test ADD INDEX(moment);

有两个查询字符串:

A: `SELECT * FROM index_test WHERE moment LIKE '2015-06-08%'` 

B: `SELECT * FROM index_test WHERE moment BETWEEN '2015:06:08 00:00:00' AND '2015:06:08 23:00:00'`

使用“解释”语句,我发现语句 B 使用了索引,但 A 没有。

当我制作 'moment' varchar 时,它们都使用索引。有谁能告诉我原因吗?

【问题讨论】:

    标签: mysql indexing


    【解决方案1】:

    在 MySQL 中,DATETIME 类型在内部存储为 8 字节数字,not 为文本字符串。因此,您在moment 列上创建的索引将用于查找给定的数字日期

    在您的查询中:

    SELECT * FROM index_test WHERE moment LIKE '2015-06-08%'
    

    MySQL 引擎首先将moment 列隐式转换为VARCHAR 类型,然后与'2015-06-08%' 进行比较。

    【讨论】:

      【解决方案2】:

      解决这个问题:

      SELECT * FROM index_test WHERE moment LIKE '2015-06-08%'

      MySQL 必须将所有日期时间值转换为字符串才能进行比较。

      所以它不能使用索引。

      【讨论】:

        猜你喜欢
        • 2011-04-30
        • 2012-08-15
        • 2018-01-24
        • 2020-05-27
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多