首页 > 解决方案 > 使用时区进行查询的最佳方法

问题描述

我有来自不同时区的用户,我需要改进我的查询之一:

 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 保留我的索引。

用户可以为我的示例选择他们想要的日期,他们选择开始和结束日期

标签: 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被索引。


推荐阅读