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作为分页查询。
数据量: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查询语句,实现高效分页,轻松响应60W请求
- MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适
- mysql查询语句优化
- mysql 语句优化查询
- mysql查询语句优化
- MySQL中优化sql语句查询常用的30种方法
- 海量数据库的查询优化及分页算法方案(3)--改善SQL语句[转]
- 海量数据库的查询优化及分页算法方案(二)-改良SQL语句 [转]
- mysql优化SELECT语句和其它查询
- mysql 分页查询语句数据库查询
- MySQL中优化sql语句查询常用的30种方法
- SQL server、MySQL、Oracle分页查询SQL语句
- Mysql API 查询优化 为什么要选用预处理语句( mysql_stmt_* )
- 使用纯索引子查询优化MySQL的分页查询速度
- 海量数据库的查询优化及分页算法方案 2 之 改良SQL语句
- mysql limit 分页语句的优化
- mysql查询语句优化命令mysql explain
- mysql优化SELECT语句和其它查询
- MySQL优化查询语句Explain
- mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数