php MySQL与分页效率_php技巧

 
最基本的分页方式:
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 articles 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

----------------------------------------

实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。

时间: 2025-01-30 08:05:59

php MySQL与分页效率_php技巧的相关文章

如何提高MySQL数据分页效率

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

php mysql数据库操作分页类_php技巧

复制代码 代码如下: <?php /*  *    mysql数据库 分页类  *    @package    pagelist  *    @author        yytcpt(无影)  *    @version    2008-03-27  *    @copyrigth    http://www.d5s.cn/   */ /*  *    分页样式     .page{float: left;font: 11px Arial, Helvetica, sans-serif; pa

MySQL提高分页效率_Mysql

下面就是大数据量时提高分页的效率的测试代码,分享给大家. --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varchar(30) null, description text ) go --插入数据 insert into SomeData values(1,'num1

PHP+MySQL删除操作实例_php技巧

本文实例讲述了PHP+MySQL删除操作的使用技巧.分享给大家供大家参考.具体如下: 复制代码 代码如下: <h1>删除记录</h1>  <?php      //连接数据库的参数      $host = "localhost";      $user = "root";      $pass = "zq19890319";      $db = "phpdev";      //创建mysql

两款万能的php分页类_php技巧

本文为大家分享个超级好用.万能的php分页类,具体的实现代码如下 第一款php分页类 <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * 分页类 * 使用方式: * $page = new Page(); * $page->init(1000, 20); * $page->setNotActiveTemplate('<

使用Limit参数优化MySQL查询的方法_php技巧

前些天看了一个老外写的程序,在 MySQL 查询中使用了很多 Limit 关键字,这就让我很感兴趣了,因为在我印象中, Limit 关键字似乎更多被使用 MySQL 数据库的程序员用来做查询分页(当然这也是一种很好的查询优化),那在这里举个例子,假设我们需要一个分页的查询 ,Oracle中一般来说都是用以下 SQL 句子实现: SELECT * FROM ( SELECT a1.*, rownum rownum_ FROM testtable a1 WHERE rownum > 20) WHER

PHP入门教程之PHP操作MySQL的方法分析_php技巧

本文实例讲述了PHP操作MySQL的方法.分享给大家供大家参考,具体如下: 设置Zend 软件所有 UTF-8 编码 设置单个项目 UTF-8 的编码 Demo1.php <?php header('Content-Type:text/html; charset=utf-8;'); //第一步,连接到 Mysql 服务器 3306 //第二步参数,服务器地址:第二个参数,服务器的用户名:第三个参数,服务器密码 //@ 如果出错了,不要出现警告或错误,直接忽略 //die 函数之前,先连接一下,报

一家之言的经验之谈php+mysql扎实个人基本功_php技巧

一. 10句话 1.不要依赖register_global=ON的环境,从你刚懂得配置php运行环境甚至尚不明白register_global的ON/OFF会对自己有什么影响的那天起,就应该勇敢地把它设为OFF. 2.写程序前看看怎么用error_reporting. 3.不懂就问本身没错,但你需要在那之前查查手册. 4.当然,你需要懂得使用手册.手册上找不到答案的时候,应该考虑下网络上的搜索引擎. 5.刚学会php+mysql之后,不要叫嚷着要写论坛,要写XXX.要明白,刚学会写汉字并不表示你

php基于单例模式封装mysql类完整实例_php技巧

本文实例讲述了php基于单例模式封装mysql类.分享给大家供大家参考,具体如下: 类: <?php header("content-type:text/html;charset=utf-8"); //封装一个类 /* 掌握满足单例模式的必要条件 (1)私有的构造方法-为了防止在类外使用new关键字实例化对象 (2)私有的成员属性-为了防止在类外引入这个存放对象的属性 (3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象