
Mysql之性能优化浅析
在索引树中找到指定范围内的起始记录的 通过在主旨表中进行 普通分页查询测试
发布日期:2021-05-27 02:54:27
浏览次数:37
分类:精选文章
本文共 2047 字,大约阅读时间需要 6 分钟。
在MySQL中处理大量数据的分页查询时,传统的LIMIT OFFSET
方法往往会遇到性能瓶颈。尤其是在数据量极大的情况下,后续分页查询的速度会随着数据量的增加而显著变慢。举个栗子,假设student
表的主键id
字段已建立索引,使用SELECT * FROM student WHERE name='曹操' ORDER BY no LIMIT 1000000,10
进行查询时,由于LIMIT
语句会直接将大量数据读取到内存中,再进行子请求,这不仅占用了大量的内存资源,而且查询速度会随着数据量的增加而严重变慢。
为了解决这一问题,我们可以利用主键索引的优势,通过定位起始位置来实现分页查询的优化。具体的方法是:
id
值。WHERE
条件过滤,从起始记录的id
开始,获取指定数量的记录。以下是实现这一优化的步骤:
1. 创建生成随机字符串的函数
DELIMITER $$$$CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255) BEGIN DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; DECLARE return_str VARCHAR(255) DEFAULT ''; DECLARE i INT DEFAULT 0; WHILE i < n DO SET return_str = CONCAT(return_str, SUBSTRING(chars_str, FLOOR(1 + RAND() * 52), 1)); SET i = i + 1; END WHILE; RETURN return_str;END $$DELIMITER ;$$
2. 实现插入大量数据的存储过程
DELIMITER $$$$CREATE PROCEDURE insert_student(IN start INT, IN max_num INT) BEGIN DECLARE i INT DEFAULT 0; SET autocommit = 0; REPEAT SET i = i + 1; INSERT INTO student(no, name, mgr, hiredate) VALUES ((start + i), rand_string(6), 0001, NOW()); UNTIL i = max_num END REPEAT; COMMIT;END $$DELIMITER ;$$
3. 为主键字段创建索引
CREATE INDEX idx_student_id ON student(id);CREATE INDEX idx_student_no ON student(no);
4. 分页查询优化示例
-- 根据当前记录起始的ID值进行查询SELECT id, no, name, hiredateFROM studentWHERE id >= ( SELECT id FROM student ORDER BY id LIMIT 1)LIMIT 10;-- 根据大数据量查询起始的ID值进行查询SELECT id, no, name, hiredateFROM studentWHERE id >= ( SELECT id FROM student ORDER BY id LIMIT 900000)LIMIT 10;
5. 测试与验证
在实际应用中,可以通过如下命令验证优化效果:
-- 普通分页查询SELECT id, no, name, hiredateFROM studentLIMIT 100, 10;
- 大数据分页查询测试
针对页面展示的分页大小进行定位
- 确定正常页面的显示数据量(如每页显示10个记录)。
- 根据当前请求的上下文,计算起始记录的
id
值。
分批处理大数据查询
- 如果需要频繁查询大数据范围,可以通过分批 fetch 的方式,逐步请求数据,以减少单次查询的负载压力。
-- 大数据分页查询SELECT id, no, name, hiredateFROM studentLIMIT 900000, 10;
6. 生产环境中的应用
在实际的生产环境中,可以采用这样的优化策略:
通过上述优化方法,我们能够显著提升LIMIT OFFSET
在大数据环境下的查询性能,同时也为后续的数据扩展奠定了一定的性能基础。在实际应用中,可以根据具体业务需求,调整索引优化的方向和分页策略,以充分发挥数据库的性能潜力。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月09日 22时38分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
假如计算机是中国人发明的,那代码应该这么写
2019-03-16
神器 Codelf !
2019-03-16
趣图:会算法和不会算法的区别
2019-03-16
区块链会2020再次爆发,先学点DAPP压压惊,跟我一起学《区块链DApp入门实战》
2019-03-16
问题解决28:微信网页授权出现redicet_uri 参数错误
2019-03-16
LeakCanary 中文使用说明
2019-03-16
反转链表,(5)
2019-03-16
Camera (api1)的打开过程
2019-03-16
wxwidgets绘图
2019-03-16
wxwidgets事件处理
2019-03-16
用OpenCv转换原始图像数据到wximage
2019-03-16
codeblocks下wxWidgets编译与配置
2019-03-16
OpenCv+wxwidgets尝试
2019-03-16
wxwidgets自定义事件+调试
2019-03-16
wxwidgets编写多线程程序--wxThread
2019-03-16
BUUCTF:[湖南省赛2019]Findme
2019-03-16
ciscn2021西北部分pwn
2019-03-17
p144循环网络
2019-03-17
Finger.01 - ESP8266模块STA模式调试
2019-03-17
三维点云处理
2019-03-17