小编Shy*_*haa的帖子

如果使用日期函数,则在 MySQL 中索引日期列不起作用

我有一个具有以下架构的表

table_name

id int
task_id int
completed_date datetime (INDEX IX_TBL_NAME_COMPLETED_DATE)
Run Code Online (Sandbox Code Playgroud)

我在这个查询上运行 EXPLAIN

EXPLAIN 
    SELECT
        *
    FROM table_name TBL
    WHERE
        TBL.completed_date BETWEEN date1 AND date2
Run Code Online (Sandbox Code Playgroud)

此查询使用已完成日期的索引运行并获取记录

但是,在使用日期函数运行相同的查询时

EXPLAIN 
    SELECT
        *
    FROM table_name TBL
    WHERE
        CONVERT_TZ(TBL.completed_date, timezone1, timezone2) BETWEEN date1 AND date2
Run Code Online (Sandbox Code Playgroud)

未使用索引导致查询变慢。

有人可以解释这种行为背后的原因以及优化此类查询的解决方案吗?

mysql optimization index-tuning datetime mysql-5.7

2
推荐指数
1
解决办法
157
查看次数

标签 统计

datetime ×1

index-tuning ×1

mysql ×1

mysql-5.7 ×1

optimization ×1