经常碰到的一个问题是limit的offset太高,如:limit 100000,20,这样系统会查询100020条,然后把前面的100000条都扔掉,这是开销很大的操作,导致查询很慢。假设所有分页的页面访问频率一样,这样的查询平均扫描表的一半数据。优化的方法,要么限制访问后面的页数,要么提升高偏移的查询效率。
一个简单的优化办法是使用覆盖查询(covering index)查询,然后再跟全行的做join操作。如:
复制代码 代码如下:
SQL>select * from user_order_info limit 1000000,5;
这条语句就可以优化为:
复制代码 代码如下:
select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
SQL>explain select * from user_order_info limit 1000000,5;
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| 1 | SIMPLE | user_order_info | ALL | NULL | NULL | NULL | NULL | 23131886 | |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
1 row in set (0.00 sec)
SQL>explain extended select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 5 | 100.00 | |
| 1 | PRIMARY | user_order_info | eq_ref | PRIMARY | PRIMARY | 42 | lim.pin | 1 | 100.00 | |
| 2 | DERIVED | user_order_info | index | NULL | PRIMARY | 42 | NULL | 23131886 | 100.00 | Using index |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
3 rows in set, 1 warning (0.66 sec)
根据两个explain的对比,可以清晰发现,第一个未使用索引,扫描了23131886行,第二个也扫描了同样的行数,但是使用了索引,效率提高了。这样可以直接使用index得到数据,而不去查询表,当找到需要的数据之后,在与全表join,获得其他的列。
limit,offset
更新日志
- 单依纯《纯情歌》2024最新 开盘母带1:1直刻[547M]
- 永劫无间手游沈妙怎么样 技能奥义介绍
- 三角洲行动穿透机制介绍 穿透等级穿透效果一览
- 吟游战记巨刃特蕾值得培养吗 角色技能属性详解
- 逆水寒手游创意工坊玩法介绍 逆水寒创意工坊怎么玩
- 逆水寒手游雀隐重楼玩法介绍 逆水寒手游雀隐重楼是什么
- 逆水寒手游神器系统玩法攻略 逆水寒手游神器系统怎么玩
- PS5首席架构师提交新专利:PS5有望原生运行PS3游戏?
- 数据显示:《地狱潜者2》在PC平台已失去90%的玩家
- 质疑和守望先锋太像?《星鸣特攻》开发商:我们与众不同
- 【休闲沙发】VA-2024-CalmReflections:ChilloutYourMind(FLAC)
- 【迷幻沙发】Koan(公案)-2024-TheQueenofSpades(SideA)(FLAC)
- 群星2006-银河映像1996-20052CD[香港首版][WAV+CUE]
- 外媒盘点游戏里十大最可怕外星生物:第一名是老熟人
- 阿拉贡演员谈参演《咕噜》新电影:要视情况而定