我有一个具有以下架构的表
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)
未使用索引导致查询变慢。
有人可以解释这种行为背后的原因以及优化此类查询的解决方案吗?