MySql千万级数据分页查询效率提升

日常项目随着业务扩张,mysql存储数据量大时(千万级+)使用limit分页,随着页码的增大,查询效率会变的低下。
数据量在万级别,任何查询只要sql正常,用户体验估计无感知。作为码农应时刻以代码最优实现为目标。
示例:
table_test:除id自增主键外,其余字段均为设置索引。

分页查询

limit原理:扫描n+size条数据,丢弃前n条,返回size条,故越后越慢。

SELECT * from table_test LIMIT 10 OFFSET 20000000 
# 在4kw数据下,查询时间233.385s
优化1

减少扫描行数,提升查询速度

SELECT * from table_test WHERE id >= 20000000 LIMIT 10 
优化2

子查询

SELECT * from table_test WHERE id >= 
(SELECT id from table_test  limit 20000000 ,1) LIMIT 10
优化3

另一种方式的子查询

SELECT a.* from table_test a 
JOIN (SELECT id from table_test limit 20000000, 10) b 
ON b.id = a.id

优化后的速度3.232s,建议若有可排序字段,根据实际情况加入到查询语句,也能提升效率。不管采用哪种优化方案,查询效率相比未优化都是质的提升。

再来一发:

我们在按固定条件查询时【查询条件是非索引字段】,一般会这么写,如:

select * from table_test where  name = '张三' 

初看查询语句,没任何问题,但在数据量大时,查询效率极低。
测试发现:上述语句查询在4kw数据量时,查询时间xxx,emmm....反正是半天没查出来,手动stop了。
改良:加上limit 1,查询时间3.023s。

总之

优化思想:尽量减少mysql查询时扫描的行数。

你可能感兴趣的:(MySql千万级数据分页查询效率提升)