大数据分页优化
php
mysql, php
字数统计: 264(字)
阅读时长: 1(分)
前言
海量数据分页,已经无法使用数据库自带的分页机制,比如 MySQL 的 Limit ,这会导致严重的性能问题
性能问题演示
1
| SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
|
offset:指定第一个返回记录行的偏移量
rows:指定返回记录行的最大数目
查询分页
分页offset偏移量计算
1
| $offset = ($page-1) * 10
|
page:当前页码
10:每页条数
offset:计算的分页偏移量
分页测试
1 2 3 4 5 6 7 8 9 10
| SELECT * FROM mp_tt_creative LIMIT 9999960,10 时间: 9.321s
mysql> EXPLAIN SELECT * FROM mp_tt_creative LIMIT 9999960,10; + | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | + | 1 | SIMPLE | mp_tt_creative | NULL | ALL | NULL | NULL | NULL | NULL | 16519407 | 100 | NULL | + 1 row in set
|
分页优化方案
1、根据id索引优化
如果表中存在 连续 的数字列并 为 索引,那么通过页码即可计算出此字段的范围,直接作范围查询即可:
1 2 3
| start = (page-1)*pagesize end = page*pagesize select * from table where id >start and id <=end
|
测试
2、根据子查询优化
3、根据第三方工具优化