在分页系统中使用limit和offset是很常见的,它们通常也会和ORDER BY一起使用。索引对排序较有帮助,如果没有索引就需要大量的文件排序。

一个常见的问题是偏移量很大,比如查询使用了LIMIT 10000,20 ,它就会产生10020行数据,并且丢失掉前10000行。

一个提高效率的简单技巧就是在覆盖索引上进行偏移,而不是全行数据进行偏移。可以讲从覆盖索引上提取出来的数据和全行的数据进行联接,然后取得需要的列。这样会更有效率,如:

SELECT film_id, description FROM sakila.film ORDER BY title LIMIT 50, 5;

如果表非常大,这个查询最好写成下面的样子:

SELECT filem.file_id, file.description from sakila.film INNER JOIN (SELECT film_id FROM sakila.film ORDER BY title LIMIT 50,5 )AS lim USING (film_id);

(个人感觉使用了覆盖索引(title)或(film_id,title))

这种方式效率更高,它让服务器在索引上面检查尽可能少的数据,一旦取得了所需要的行,就把它们联接到完整的表上面,并取出其余的列。类似的技巧可以应用到有LIMIT子句的联接上面。

Laravel上的实现:Model::offset(1000)->limit(20)->get()

本文有百牛信息技术bainiu.ltd整理于博客园

最新文章

  1. python网络编程-OSI七层模型详解
  2. Entity Framework Code First属性映射约定
  3. H5点击事件兼容各种APP浏览器
  4. Visual Studio的调试技巧
  5. Python之with语句
  6. centos BIND服务基础及域主服务器配置
  7. c# dynamic动态类型和匿名类
  8. jquery1.0源码【1-60行】构造函数及全局$变量
  9. 第二章 rabbitmq在mac上的安装
  10. [C++][语言语法]标准C++中的string类的用法总结
  11. iOS - OC SingleClass 单例类
  12. 见过的最好AWK手册
  13. Technology_Roadmap
  14. PHP - 发送短信
  15. 我是如何利用Hadoop做大规模日志压缩的
  16. Android类加载机制及热修复实现
  17. springcloud~Eureka实例搭建
  18. STM32L476应用开发之四:触摸屏驱动与数据交互
  19. 【题解】JSOIWC2019 Round2
  20. BZOJ1212[HNOI2004]L语言——trie树+DP

热门文章

  1. HDU 4578 线段树复杂题
  2. Monkey King(左偏树)
  3. 关于srand()rand()的用法
  4. c++之析构函数
  5. (在线工具)JSON字符串转换成Java实体类(POJO)
  6. 【Codeforces Round #501 (Div. 3)】
  7. 汕头市赛srm10 T2
  8. HDU 6437 最(大) 小费用最大流
  9. codevs——1269 匈牙利游戏
  10. python字符串连接方法效率比较