[英]MySQL parallel execution for date range count() query do not give performance optimization
D B:
MySQL 5.7
表格引擎:
ENGINE=InnoDB
询问:
SELECT count(*) as COUNT
FROM Data d
WHERE d.StartDate >= ?
AND d.StartDate < ?
AND d.EntityID IN (1245)
AND d.Condition01 > 0
AND d.Condition02 = 'abs'
AND (d.Condition03 LIKE '%abs%' OR p.Condition04 LIKE '%abs%');
参数:
String start = "2021-12-01 00:00:00";
String end = "2022-04-01 00:00:00";
在 200+ 百万行查询上执行 20 秒。
如果开始和日期范围划分为更小的时间段,例如:
2021-12-01 00:00:00 2021-12-02 00:00:00
2021-12-02 00:00:00 2021-12-03 00:00:00
...
2022-03-30 00:00:00 2022-03-31 00:00:00
2022-03-31 00:00:00 2022-04-01 00:00:00
并使用此参数并行执行查询,结果将在 2 秒内获得。
该方法适用于 MySQL 5.6 的服务器,但不适用于 MySQL 5.7 的服务器。
是 MySQL 内部优化还是其他? TABLE LOCK 会导致问题吗? 还有什么会导致并行执行中计数查询的执行时间与大日期范围的查询相同?
对于该查询,这可能是最佳的:
INDEX(Condition02, EntityID, StartDate)
我们可以讨论一种使用汇总表的可能更快的方法,但首先,请告诉我们有关每列选择性的一些详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.