mysql 分页查询语句优化

测试表:user_center. user_app_device

数据量:8千万条

分页语句SQL_1:SELECT id,uid,device_token FROM user_app_device WHERE app_id=100000000  LIMIT i,100;

分页语句SQL_2:SELECT a.id,a.uid,a.device_token FROM user_app_device_bigint2 a,

 (SELECT id FROM user_app_device_bigint2 WHERE app_id=100000000 ORDER BY id LIMIT i,100) b

 WHERE a.id = b.id;

其中i的取值范围从0到4千万,间隔为10w,下面是测试结果:

从上图可以看出,分页语句SQL_1随着i的不断增长,响应时间攀升的很快,而分页语句SQL_2的响应时间涨的很慢。这是为什么呢?

这和MySQL索引的原理有关系,举个例子,下面这2条语句看起来很像,但执行时间却差很多:

SELECT id,uid,device_token FROM user_app_device WHERE app_id=100000000  LIMIT 3000000,100;  -- 执行时间:7.071秒

SELECT id FROM user_app_device WHERE app_id=100000000 ORDER BY id LIMIT 3000000,100;  -- 执行时间:1.096秒

这是因为SQL_2由于只select主键,故只需要访问索引即可,不需要回访表,因此性能提升很多。

测试结论:

对于小表(数据量<10w),方便起见,可以使用SQL_1作为分页查询,但对于大表,建议使用SQL_2作为分页查询。

 

 


你可能感兴趣的:(mysql,优化,select)