1、一个接口请求响应超时,原因在于 count(*) SQL 耗时 54 秒。表中数据量超过 1000万 条。如图1

SQL
SELECT
count(*) AS AGGREGATE
FROM
`tables`
2、其中表字段 shipping_type 有添加索引,且其值仅有 1、2 两种可能。决定添加 where 条件 shipping_type IN (1,2)。查询时长 3 秒。如图2

SQL
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


评论
一条对“在 MySQL 8.0 中,查询表记录总数时,超时的分析优化”的回复
[…] 1、参考:在 MySQL 8.0 中,查询表记录总数时,超时的分析优化。 在 Navicat 中的执行时长为:3.075秒。如图1 […]