我的数据库数据量不够,不到两万条,但是也可以看出来效果了,看一下下面两个分页的区别。
前10行的分页查询耗时3ms;
1000行开始的10行,花费时间是7ms,似乎差距不大;
5000行之后的10行,花费时间22ms,就已经是之前的数倍了;
15000行之后的10行,花费时间是第一个sql的数十倍;
1、主键条件优化查询
查询结果是15000后的10行(注意查询条件) ,花费时间仅为3ms;但是此查询有一定的限制,首先需要索引是int/bigint等数据类型,其次该sql需要先在代码中计算出本次分页查询的其实id值,然后以id值作为查询条件。
2、分步查询
我们知道mysql索引会包含索引列本身的值,但是不一定会包含其他列的值(具体可查看聚簇索引、非聚簇索引的区别),所以如果sql仅返回索引列则会通过索引扫描,执行速度会快很多:
如图仅查询索引列的情况下,花费时间为5ms;
然后将该sql的查询结果作为条件,查询所有列:
由此可以看出,这种查询方式较直接分页查询块很多,而且数据量越大差距越明显。
下面可以看一下sql的执行计划,返回所有列:
返回索引列(主键) :