在 MySQL 8.0 中,查询表记录总数时,超时的分析优化
1、一个接口请求响应超时,原因在于 count(*) SQL 耗时 54 秒。表中数据量超过 1000万 条。如图1
SELECT count(*) AS AGGREGATE FROM `tables`
2、其中表字段 shipping_type 有添加索引,且其值仅有 1、2 两种可能。决定添加 where 条件 shipping_type IN (1,2)。查询时长 3 秒。如图2
SELECT count(*) AS AGGREGATE FROM `tables` WHERE shipping_type IN ( 1, 2)
3、最终决定基于主键 ID 作为 where 条件,以尽量保持所有 count SQL 的 where 条件的统一。当一条 count SQL 没有 where 条件存在时,就添加 WHERE id > 0。耗时 4 秒,符合预期。如图3
1 条回复
[…] 1、参考:在 MySQL 8.0 中,查询表记录总数时,超时的分析优化。 在 Navicat 中的执行时长为:3.075秒。如图1 […]