MySQL与分页

如果和MSSQL的TOP语法相比,那么MySQL的LIMIT语法要显得优雅了许多。使用它来分页是再自然不过的事情了。

最基本的分页方式:

SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引:

举例来说,如果实际SQL类似下面语句,那么在category_id, id两列上建立复合索引比较好:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10

子查询的分页方式:

随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

SELECT * FROM aricles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10

一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。

此时,我们可以通过子查询的方式来提高分页效率,大致如下:

SELECT * FROM articles WHERE category_id = 123 AND id >= (
  SELECT id FROM articles ORDER BY id LIMIT 10000, 1
) LIMIT 10

时间: 2024-10-27 21:59:03

MySQL与分页的相关文章

用 javabean 来实现 MySQL 的分页显示

mysql|分页|显示 用 javabean 来实现 MySQL 的分页显示 ●○●○●○●○●○●○●○●○●○●○●○●○●○●○○  作者:刘湛      日期:2000-02-04      jeru@163.net  ●●  http://www.cyberlabs.com/~jeru/                   ○○  欢迎访问爪哇人,获取更多资料                      ●●○●○●○●○●○●○●○●○●○●○●○●○●○●○ 今天写了个 MySQL

如何提高MySQL数据分页效率

  本节的数据编辑插教程给我们简单介绍如何提高MySQL数据分页效率,下面我们将会给出的这段代码是大数据量时提高分页的效率的测试代码. 如果你也需要设置MySQL数据提高分页效率,那么,就一起来看看代码段吧! --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varcha

MySQL的分页查询语句limit

问题描述 MySQL的分页查询语句limit 假设,一个表中有一百条数据,我要查询第5页,每页10条数据,SQL语句怎么写?是用limit么? 不用涉及到Java语言,就SQL语句 解决方案 SELECT * FROM table LIMIT 51,10; 解决方案二: 查询第m页,每页n条数据 SELECT * FROM tablename LIMIT (m-1)*n,n 解决方案三: SELECT * FROM tablename LIMIT 5,10 解决方案四: SELECT * FRO

Mysql中分页查询两个方法比较

mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1;   SELECT a FROM foo WHERE b = 1 LIMIT 100,10; 1    另外一种是使用SQL_CALC_FOUND_ROWS 1 2 SELECT SQL_CALC_FOUND_ROWS a FROM foo WHERE b = 1 LIMIT 100, 10; SELECT FOUND_ROWS(

Struts2.1.6+Spring2.5.6+Hibernate3.3.2+mysql整合+分页模板

Struts2.1.6+Spring2.5.6+Hibernate3.3.2+mysql整合+分页模板 博客分类:Java MySQLHibernateAOPSpringStruts  1.导入29个JAR包   JAR包名称 作用 Struts2.1.6(7个)   struts2-core-2.1.6.jar struts2开发的核心类库 freemarker-2.3.13.jar struts2的UI标签的模板使用freemarker编写 commons-logging-1.0.4.jar

急!关于mysql+jsp分页显示的问题,请哪位好心的大神帮忙看一下,很急!!谢谢!!

问题描述 急!关于mysql+jsp分页显示的问题,请哪位好心的大神帮忙看一下,很急!!谢谢!! 浏览器显示时总是重复出现当前页最后一条信息,是怎么回事啊? 这是jsp代码: <% int pageNum = 1; int pageSize=LunwenDao.PAGE_NUM; String paramPage = request.getParameter("page"); if (paramPage != null) { pageNum = Integer.parseInt(

java应用-oracle数据库和mysql数据库分页查询区别?

问题描述 oracle数据库和mysql数据库分页查询区别? oracle数据库和mysql数据库分页查询有什么区别?有何不同?具体,求教! 解决方案 oracle数据库分页用到rownum大小截取.mysql用limit.用法不一样 解决方案二: 语法上略有差别,但是大同小异,oracle借助行号函数来实现.http://blog.sina.com.cn/s/blog_8604ca230100vro9.html MySQL有limit函数http://qimo601.iteye.com/blo

Mysql中分页查询的两个解决方法比较_php实例

mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 复制代码 代码如下: SELECT COUNT(*) FROM foo WHERE b = 1; SELECT a FROM foo WHERE b = 1 LIMIT 100,10; 另外一种是使用SQL_CALC_FOUND_ROWS 复制代码 代码如下: SELECT SQL_CALC_FOUND_ROWS a FROM foo WHERE b = 1 LIMIT 100, 10; SELECT FOUND_

MySQL高效分页与分页优化分析

在Percona Performance Conference 2009大会上来自yahoo的Surat Singh Bhati (surat@yahoo-inc.com) 和 Rick James (rjames@yahoo-inc.com)给大家分享了MySQL高效分页的经验. 一.概述 常见分页方式 schema设计和常见的分页方式(偏移) 避免分页偏移过大的技巧 性能对比 重点 二.常见分页方式 三.前提 大记录表要高效分页 WHERE条件使用索引完成 WHERE条件和排序能够使用同个索

MySQL中分页优化的实例详解_Mysql

通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY id DESC LIMIT 100, 10; 或者像下面这个不带任何条件的分页SQL: SELECT * FROM `t1` ORDER BY id DESC LIMIT 100, 10; 一般而言,分页SQL的耗时随着 start 值的增加而急剧增加,我们来看下面这2个不同起始值的分页SQL执行