mysql - 使用时区进行查询的最佳方法
问题描述
我有来自不同时区的用户,我需要改进我的查询之一:
WHERE DATE_ADD(pa.inspection_date, INTERVAL -39600 SECOND) >= Date( '2020-05-05')
AND DATE_ADD(ai.inspection_completed_date, INTERVAL -39600 SECOND) <= DATE(
'2020-05-06') + INTERVAL 1 DAY
目前,此查询非常慢(5 分钟),因为我认为Date_add
损坏(忽略)我的inspection_date
字段索引。如果我删除Date_add
我得到 0.2 秒的结果。
我在数据库上的所有时间都是 UTC。所以我想知道,如何使用用户时区执行 mysql 查询,让 mysql 保留我的索引。
用户可以为我的示例选择他们想要的日期,他们选择开始和结束日期
解决方案
试试这个方法:
WHERE pa.inspection_date >= (DATE('2020-05-05') + INTERVAL 11 HOUR)
AND ai.inspection_completed_date <= DATE('2020-05-06') + INTERVAL 35 HOUR
pa.inspection_date
并检查两个列是否都ai.inspection_completed_date
被索引。