我有一个包含约5百万行数据的数据库,并尝试优化其加载时间。我已经尽可能优化了列和索引,因此我认为问题出在查询语句上。这个查询在一个包含约5百万行数据的表上运行,并返回其中的40行,但需要101秒才能完成。
如果我删除时区转换,同样的查询只需0.0015秒即可完成,但由于时区差异,结果略有不同。如何优化以获得正确的结果并提高速度?
如果我删除时区转换,同样的查询只需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`
如果之前不清楚的话,我正在转换的第二个时区会根据用户而变化,所以现在是美国/纽约,与US/Eastern相同,但它会改变。
where foo=1
是可以的,并且可以使用任何适用的索引。而where somefunc(foo)=1
则不行,因为somefunc
的结果是无法被索引的。 - Marc Beventdate = date(convert_tz('2014-11-19'))
这样的操作。然后,您可以使用索引。因为索引字段正在被“原样”使用。 - Marc B