繁体   English   中英

MySQL查询优化?

[英]MySQL Query Optimization?

所以我有一个大约有500万行DB ,我正在尝试优化加载时间。 我的数据库已经根据我的想法进行了优化的列和索引,所以我假设它的查询。 此查询在一个包含约500万行的表上运行,并返回40个 ,但需要101秒。

如果我删除timezone转换,则同一查询需要0.0015秒,但由于时区差异,返回的结果略有不同。 我如何优化以更快的速度获得正确的结果?

SELECT *, date(CONVERT_TZ(eventDate, "US/Eastern", "America/New_York")) as `timezoneDate`
FROM `transactions`
WHERE `isValid` = X
AND `storeID` = X
AND date(CONVERT_TZ(eventDate, "US/Eastern", "America/New_York")) >= '2014-11-19'
AND date(CONVERT_TZ(eventDate, "US/Eastern", "America/New_York")) <= '2014-11-25'
ORDER BY `eventDate` 

此外,如果之前不清楚,我转换为第二个时区的变化取决于用户,所以现在它的America / New_York与US / Eastern相同,但它会发生变化。

我最终做的是混合了JRD,TZHX和MarcB的评论。 我最终做了一个没有时区的选择,但是增加了我的选择半径加减一天。 这使得我的约500万行减少到大约50,但是因为它比我想要的稍微多一点,然后我运行原始查询,但只对第一个选择返回的50个结果。 这导致返回所有完全相同的数据,但仅在0.11秒内。 非常感谢你们!

如何推迟日期过滤:

select * from (     
SELECT *, date(CONVERT_TZ(eventDate, "US/Eastern", "America/New_York")) as `timezoneDate`
    FROM `transactions`
    WHERE `isValid` = X
    AND `storeID` = X
)
where timezoneDate between '2014-11-19' and '2014-11-25'
ORDER BY timezoneDate

不知道您的数据,您应该确保您有关于transactions(storeId, isvalid, eventdate)的索引transactions(storeId, isvalid, eventdate)

如果这对性能没有帮助,那么您的选择会受到更多限制。 一个是为纽约定义一个“规范”的活动时间。 这需要触发器来进行转换。

第二种选择类似,但它涉及将时差保持为单独的列。

我建议对常数进行时区转换,但两个时区应该相同。 我不知道为什么他们会返回不同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM