`
cdzm5211314
  • 浏览: 8146 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql limit分页查询优化写法

阅读更多
在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用orderby排 序。但是在表数据量比较大的时候,例如查询语句片段limit 10000, 20,数据库会读取10020条数据,然后把前10000条丢弃,把最后的20条返回给你,这种消耗是可以避免的,也是没必要的。下边介绍几种优化方法:
  优化方法1(让分页操作在索引中进行):
  一般表中经常作为条件查询的列都会建立索引,例如如下查询
  Sql代码
  SELECT msg_id, msg_content FROM message ORDER BY gmt_create desc LIMIT 100, 20;
  可以写成如下方式
  Sql代码
  SELECT msg_id, msg_content FROM message
  INNER JOIN (
  SELECT msg_id FROM message
  ORDER BY gmt_create LIMIT 100, 20
  ) AS page USING(msg_id);
  这样当前查询页的内容就只会在索引中进行,当得到当前页的msg_id再统一通过一个INNER JOIN得到最终要得到的数据详情,避免了对大量数据详情进行操作的消耗。当然JOIN操作也可以通过子查询实现,不过书中介绍5.6之前版本的 mysql相比子查询还是优先使用JOIN。
  优化方法2(显式指定要查询的索引列范围)
  例如方法一中的gmt_create是建立索引的列,而且你也知道要查询的时间范围,这样你就可以通过如下查询语句:
  Sql代码
  SELECT msg_id, msg_content FROM message
  WHERE gmt_create BETWEEN #startTime# AND #endTime#
  ORDER BY gmt_create desc
  这样数据库通过一个范围查询就可以得到想要的数据。
  优化方法3(OFFSET作为查询条件显式指定)
  例子还是如上,我们可以在查询参数中显式指定一个查询时间,叫做lastVisitTime吧。我们查询第一页可以用如下语句:
  Sql代码
  SELECT msg_id, msg_content FROM message
  ORDER BY gmt_create desc
  LIMIT 20
  我们把读出来的数据的最后一条数据的gmt_create字段记录在lastVisitTime字段中,那么后边页的查询就可以用如下语句实现:
  Sql代码
  SELECT msg_id, msg_content FROM message
  WHERE gmt_create < #lastVisitTime#
  ORDER BY gmt_create desc
  LIMIT 20;
  这种查询方式,无论你查询多少页,分页都不会是影响效率的因素。
分享到:
评论

相关推荐

    Mysql Limit 分页查询优化详解

    主要介绍了Mysql Limit 分页查询优化的相关资料,非常不错,介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

    mysql分页之limit优化技巧

    本文档针对mysql分页之limit慢的问题,使用联合索引在大数据量的情况下优化limit分页的性能

    mysql limit分页优化详细介绍

    今天发现一篇文章写了些关于limit优化的,很不错。 文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行...

    mysql分页的limit参数简单示例

    Mysql的分页的两个参数 select * from user limit 1,2 ... 您可能感兴趣的文章:详解MySQL的limit用法和分页查询语句的性能分析MYSQL分页limit速度太慢的优化方法mysql limit分页优化方法分享Mysql limit

    关于Mysql分页的两种方法,假分页和limit分页

    关于Mysql分页的两种方法,一种假分页,没有效率提高,另一种使用limit,对数据量小的情况下效率会高点

    易语言源码MYSQL数据库分页查询.rar

    易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页...

    nodejs mysql 实现分页的方法

    这两天学习了nodejs mysql 实现分页,很重要,所以,今天添加一点小笔记。 代码如下 var express = require('express'); var router = express.Router(); var settings = require('../settings.js'); var mysql =...

    易语言MYSQL数据库分页查询

    易语言MYSQL数据库分页查询源码,MYSQL数据库分页查询,载入表记录,显示指定范围记录,取总记录数2,显示记录

    Oracle,SQl,MySql实现分页查询

    通过SQL 查询分析器,显示比较:我的结论是: 分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用...

    易语言MYSQL数据库分页查询.rar

    易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar

    MySQL 百万级分页优化(Mysql千万级快速分页)

    MySQL 百万级分页优化(Mysql千万级快速分页),主要解决大数量级的优化

    基于MySql多表分页查询优化技术.pdf

    基于MySql多表分页查询优化技术.pdf

    C++实现MySQL分页查询

    c++实现mysql分页查询

    浅谈mysql使用limit分页优化方案的实现

    Mysql limit分页语句用法 与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭。 –语法: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset –举例: select * from table limit 5; --...

    JDBC-MySQL分页查询

    JDBC-MySQL分页查询,jsp为显示的页面

    ssm的mysql分页查询

    page ssm mysql 分页查询 绝对的强大

    MySQL Limit性能优化及分页数据性能优化详解

    MySQL Limit可以分段查询数据库数据,主要应用在分页上。虽然现在写的网站数据都是千条级别,一些小的的优化起的作用不大,但是开发就要做到极致,追求完美性能。下面记录一些limit性能优化方法。 Limit语法: ...

Global site tag (gtag.js) - Google Analytics