php MySQL与分页效率_php技巧
程序员文章站
2022-05-13 14:57:50
...
最基本的分页方式:
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
----------------------------------------
实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。
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
----------------------------------------
实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。
上一篇: javaScript复制功能调用实现方案_基础知识
下一篇: PHP简单适配器模式的介绍
推荐阅读
-
深入理解用mysql_fetch_row()以数组的形式返回查询结果_php技巧
-
php foreach 使用&(与运算符)引用赋值要注意的问题_php技巧
-
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析_php技巧
-
php实现MySQL数据库备份与还原类实例_php技巧
-
php中switch与ifelse的效率区别及适用情况分析_php技巧
-
MySql数据库查询结果用表格输出PHP代码示例_php技巧
-
php+ajax实现无刷新数据分页的办法_php技巧
-
php简单备份与还原MySql的方法
-
php+mysql prepare 与普通查询的性能对比实例讲解
-
PHP的Laravel框架结合MySQL与Redis数据库的使用部署