`

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 分页的用法及注意要点

    对于大数据集,建议使用`ORDER BY`结合`LIMIT`优化查询,避免使用大的偏移量。 2. **效率优化**:如果查询中包含`ORDER BY`,应尽可能减少`OFFSET`值,因为`ORDER BY`会增加额外的计算成本。 3. **不确定性**:当...

    JAVA JAP分页写法大全

    这个压缩包文件名"JAVA JAP分页写法大全"暗示了它可能包含各种不同的分页实现示例,这对于初学者来说是一个极好的学习资源。下面我们将详细探讨Java中常见的分页方法。 首先,我们要理解分页的基本概念。在处理大量...

    mysql优化文档

    然而,传统的LIMIT分页方法在翻页到后几页时可能会遇到性能瓶颈。 **普通写法示例:** ```sql SELECT * FROM sys_info.jdp_tb_trade WHERE seller_nick = 'xuancan' AND jdp_modified &gt;= '2012-09-18 16:00:01' AND...

    db2迁移到mysql.docx

    在DB2中,`WITH UR` 是一个用于优化查询性能的选项,它表示“无需恢复”(Without Recovery),意味着读取的数据可能不是最新的。在MySQL中并没有直接等价的功能。因此,在迁移过程中,如果涉及到`WITH UR`的使用,则...

    SSH分页技术详解与实例

    7. **实际项目中的适应性**:在实际项目中,可能需要根据数据库类型和具体需求调整分页SQL的写法,例如Oracle支持ROWNUM,而MySQL则可以使用LIMIT和OFFSET。 **优化技巧**: 1. **缓存**:对于不经常变动的数据,...

    php 的简单分页原理

    7. **执行分页查询**:构造分页SQL查询,使用计算出的偏移量和每页记录数,然后用`mysql_query()`执行查询。 8. **显示数据**:通过`mysql_fetch_array()`遍历查询结果,获取每页需要显示的数据,并将其展示在网页...

    mysql 入门笔记 简单易学。一小时上手

    例如“LIMIT(n-1)*count, count”,其中(n-1)*count计算起始位置,count表示每页显示的条数,这种写法可以实现数据的分页查询。 3. 别名:在SQL查询中使用别名可以简化SQL语句的复杂性,并使得输出结果的列名更加...

    mysql类似oracle rownum写法实例详解

    同样地,如果你想在 MySQL 中模拟 Oracle 的分页查询,Oracle 原版写法如下: ```sql SELECT * FROM ( SELECT id, name FROM t ) WHERE ROWNUM (num); ``` 在 MySQL 中,你可以使用以下方式实现: ```sql SET @...

    深入分析Mysql中limit的用法

    MySQL中的`LIMIT`子句是查询语句的重要组成部分,它允许你限制返回的数据行数,这对于数据分页、获取特定范围的数据或者优化大数据查询非常有用。`LIMIT`的基本语法是`LIMIT [offset,] rows`或者`LIMIT rows OFFSET ...

    Oracle与Mysql主键、索引及分页的区别小结

    在数据库管理领域,Oracle和MySQL是两种广泛应用的关系型数据库管理系统(RDBMS)。它们在处理主键、索引和分页方面存在一些显著的区别,这些差异对于...理解这些差异有助于优化查询性能,提高数据库系统的整体效率。

    Oracle到mysql转换的问题总结.doc

    - MySQL使用`LIMIT`关键字进行分页,如`SELECT * FROM table LIMIT m, n`。 5. **日期转换函数**: - Oracle的`TO_CHAR`和`TO_DATE`对应MySQL的`DATE_FORMAT`和`STR_TO_DATE`,需注意格式字符串的对应。 - ...

    PHP分页程序的两种方法

    使用`LIMIT`关键字进行分页查询,指定从哪个位置开始查询以及查询多少条记录。 8. **处理查询结果并显示:** ```php while ($row = mysql_fetch_assoc($result)) { echo "&lt;pre&gt;"; echo $row["xnhost_id"]; ...

    mysql查询语句及很好用

    `LIMIT`子句用于限制查询结果的数量,常用于分页显示数据。 - **语法示例**: ```sql SELECT * FROM article LIMIT 100, -1; ``` 这条语句的写法不太常见,通常的格式应该是`LIMIT [OFFSET, ]ROWS`。如果按照...

    Oracle到mysql转换的问题总结[收集].pdf

    - MySQL的`LIMIT`子句可以轻松实现分页,如`SELECT * FROM table LIMIT m, n`。Oracle中通常使用子查询结合`ROWNUM`来达到相同效果。 5. **日期和时间函数**: - Oracle的`TO_CHAR`和`TO_DATE`分别对应MySQL的`...

    Oracle到mysql转换的问题总结要点.doc

    - MySQL使用`LIMIT`关键字进行分页,如`LIMIT m, n`,从第m+1条开始取n条数据。 5. **函数转换**: - 日期转换:Oracle的`TO_CHAR`和`TO_DATE`在MySQL中对应`DATE_FORMAT`和`STR_TO_DATE`,需注意时间格式的一致...

    Oracle与MySQL的几点区别

    MySQL中通常使用`LIMIT`关键字来实现分页查询,例如: ```sql SELECT * FROM table_name LIMIT 10 OFFSET 20; ``` 而在Oracle中,则使用`ROWNUM`来进行分页,如下所示: ```sql SELECT * FROM ( SELECT ROWNUM ...

    java数据库之sql优化

    - 在查询时使用`LIMIT`来分页获取结果,减少数据传输量。 #### 四、优化之SQL数据库 1. **系统调优参数** - `back_log`:用于设置当连接数达到最大值时,还可以有多少个连接请求被放入队列等待。可以根据实际...

Global site tag (gtag.js) - Google Analytics