一、模拟场景
1、产品表t_product,数据量500万+
2、未做任何优化前,cout查询时间大约4秒;LIMIT offset, count
时,offset 值较大时查询时间越久。
count查询
SELECT COUNT(*) AS total FROM t_product WHERE deleted = 0 AND tenant_id = 1
分页查询
SELECT * FROM t_product WHERE deleted = 0 AND tenant_id = 1 ORDER BY id DESC LIMIT 1000000,10
3、当表里边还有很多需要翻译的字段则整个分页查询接口的请求延迟大约在10秒以上。
二、原因分析
Count求总数性能问题原因:InnoDB存储引擎:
- 特性:
- InnoDB 不存储表的总行数。
- 每次执行
COUNT(*)
时,InnoDB 需要逐行扫描,计算符合条件的记录数。 </