在分页系统中使用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整理于博客园

优化Laravel的分页LIMIT和OFFSET调用的更多相关文章

  1. MYSQL分页limit速度太慢优化方法

    http://www.fienda.com/archives/110 在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死 ...

  2. LIMIT和OFFSET分页性能差!今天来介绍如何高性能分页

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 前言 之前的大多数人分页采用的都是这样: SELEC ...

  3. 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

  4. [MySQL优化案例]系列 — 分页优化

    通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...

  5. Oracle分页(limit方式的运用)

    select * from a_matrix_navigation_map where rowid not in(select rowid from a_matrix_navigation_map w ...

  6. php分页类 可直接调用

    <?php /** * 分页类 * @author xyy * 调用分页实例 $subPages=new SubPages(数据总条数);//实例化分页类 * //$subPages->s ...

  7. Laravel 手动分页实现

    Laravel 手动分页实现 基于5.2版本 在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示.Laravel官方提供了一个简单的方式paginate($perP ...

  8. mysql limit和offset用法

    limit和offset用法 mysql里分页一般用limit来实现 1. select* from article LIMIT 1,3 2.select * from article LIMIT 3 ...

  9. mysql中limit 和 limit 与 offset 的用法(效果相同,用法不通过)

    例1,假设数据库表student存在13条数据. 代码示例: 语句1:select * from student limit 9,4 语句2:slect * from student limit 4 ...

随机推荐

  1. [转]genymotion Unable to load VirtualBox engine 某种解决办法

    genymotion Unable to load VirtualBox engine 某种解决办法 耳闻genymotion这款模拟器很强力.于是下下来试试看.我的机器上是有virtualbox的了 ...

  2. [Vijos] 天才的记忆

    背景 神仙飞啊飞 描述 从前有个人名叫W and N and B,他有着天才般的记忆力,他珍藏了许多许多的宝藏.在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁能轻松回答出这个问题,便可以 ...

  3. Codeforces Round #298 (Div. 2) D. Handshakes [贪心]

    传送门 D. Handshakes time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  4. Borg Maze-POJ3026(bfs+最小生成树)

    http://poj.org/problem?id=3026 如果一个一个普通搜处理不好的话会超时  可以连到一块搜 我觉得这个方法特别好 #include<stdio.h> #inclu ...

  5. 从Java代码到字节码

    http://www.importnew.com/13107.html http://blog.csdn.net/dc_726/article/details/7944154/ http://www. ...

  6. python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别和基本使用

    1.解析速度:ElementTree在 Python 标准库中有两种实现.一种是纯 Python 实现例如 xml.etree.ElementTree ,另外一种是速度快一点的 xml.etree.c ...

  7. the attribute buffer size is too small 解决方法

    在进行查询的时候引发The attribute buffer size is too small错误解决 http://bbs.esrichina-bj.cn/esri/viewthread.php? ...

  8. 【c++】面向对象程序设计之继承中的类作用域

    当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内. 一个对象.引用或指针的静态类型决定了该对象的哪些成员是可见的.即使静态类型与动态类型可能不一致,但我们使用哪些成员仍然是由静态类型决定的.基 ...

  9. webpack-Modules(模块)

    模块(Modules) 在模块化编程中,开发者将程序分解成离散功能块(discrete chunks of functionality),并称之为模块. 每个模块具有比完整程序更小的接触面,使得校验. ...

  10. OSChinaclient源代码学习(2)--缓存的设计

    一.缓存的作用 请求数据的时候,首先进行推断,能否够从缓存中获取数据,假设满足条件,则直接从缓存中获取数据.否则请求新的数据.这样比没有缓存的情况下.每次都要从server请求数据要快,并且.没有网的 ...