您的位置:首页 > 数据库 > MySQL

mysql 分页查询语句优化

2014-11-19 14:46 393 查看
测试表: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作为分页查询。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: