当前位置:  数据库>mysql

优化mysql的limit offset的例子

    来源: 互联网  发布时间:2014-10-07

    本文导语:   经常碰到的一个问题是limit的offset太高,如:limit 100000,20,这样系统会查询100020条,然后把前面的100000条都扔掉,这是开销很大的操作,导致查询很慢。假设所有分页的页面访问频率一样,这样的查询平均扫描表的一半数据。...

 经常碰到的一个问题是limit的offset太高,如:limit 100000,20,这样系统会查询100020条,然后把前面的100000条都扔掉,这是开销很大的操作,导致查询很慢。假设所有分页的页面访问频率一样,这样的查询平均扫描表的一半数据。优化的方法,要么限制访问后面的页数,要么提升高偏移的查询效率。

     一个简单的优化办法是使用覆盖查询(covering index)查询,然后再跟全行的做join操作。如:

代码如下:

SQL>select * from user_order_info limit 1000000,5;

这条语句就可以优化为:
代码如下:

select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
SQL>explain select * from user_order_info limit 1000000,5;
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| 1 | SIMPLE | user_order_info | ALL | NULL | NULL | NULL | NULL | 23131886 | |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
1 row in set (0.00 sec)
SQL>explain extended select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 5 | 100.00 | |
| 1 | PRIMARY | user_order_info | eq_ref | PRIMARY | PRIMARY | 42 | lim.pin | 1 | 100.00 | |
| 2 | DERIVED | user_order_info | index | NULL | PRIMARY | 42 | NULL | 23131886 | 100.00 | Using index |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
3 rows in set, 1 warning (0.66 sec)


根据两个explain的对比,可以清晰发现,第一个未使用索引,扫描了23131886行,第二个也扫描了同样的行数,但是使用了索引,效率提高了。这样可以直接使用index得到数据,而不去查询表,当找到需要的数据之后,在与全表join,获得其他的列。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Mysql大表查询优化技巧总结及案例分析
  • mysql优化之路----hash索引优化
  • MySQL优化分析器 mysqloa
  • MySQL缓存优化模块 Flashcache
  • mysql -参数thread_cache_size优化方法 小结
  • 基于MYSQL中优化的一些方法
  • 深入mysql并发插入优化详解
  • mysql myisam 优化设置设置
  • mysql limit分页优化方法分享
  • MySQL SQL语句优化的10条建议
  • mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)
  • 实现MySQL定时批量检查表repair和优化表optimize table的shell脚本
  • 跟着hsp一步步学mysql优化的方法
  • MySQL查询优化之索引的应用详解
  • MySQL性能优化之Open_Table配置参数的合理配置建议
  • linux下mysql的优化配置方案
  • MySQL对limit查询语句的优化方法
  • 关于mysql中innodb的count优化问题分享
  • mysql千万级数据大表该如何优化?
  • mysql 数据库中my.ini的优化 2G内存针对站多 抗压型的设置
  • MySQL性能优化 出题业务SQL优化
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • GCC的O1、O2、O3选项究竟优化了什么?
  • Windows优化大师最新版 V7.99 Build 12.604发布
  • 解析Android开发优化之:对界面UI的优化详解(三)
  • JPEG 图像优化工具 jpegoptim
  • 图片优化工具 ImageOptim
  • 一个编译优化问题
  • gcc 优化
  • 急,来者有分,怎样对程序中的SQL语句进行优化
  • SPICE 电路优化 ASCO


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3