当前位置:网站首页>MySql千万级分页优化,快速插入千万数据方法
MySql千万级分页优化,快速插入千万数据方法
2022-08-02 09:40:00 【夜の雨】
为便于测试 新建表格 插入两千万条测试数据
Mysql版本:5.7.34
1. 快速插入千万数据
--创建MyISAM模式表方便批量跑数据(模拟实际用表多字段)
CREATE TABLE `my_tables` (
`id` bigint(32) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`age` int(32) DEFAULT NULL,
`time` varchar(32) DEFAULT NULL,
`pwd` varchar(32) DEFAULT NULL,
`test` varchar(255) DEFAULT NULL,
`test2` varchar(255) DEFAULT NULL,
`test3` varchar(255) DEFAULT NULL,
`test4` varchar(255) DEFAULT NULL,
`test5` varchar(255) DEFAULT NULL,
`test6` varchar(255) DEFAULT NULL,
`test7` varchar(255) DEFAULT NULL,
`test8` varchar(255) DEFAULT NULL,
`test9` varchar(255) DEFAULT NULL,
`test10` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
--创建存储过程(插入两百万条数据,大概45秒左右,多执行几次数据就多了)
DROP PROCEDURE IF EXISTS my_insert;
CREATE PROCEDURE my_insert()
BEGIN
DECLARE n int DEFAULT 1;
loopname:LOOP
INSERT INTO `my_tables`(`name`,`age`,`time`,`pwd`)
VALUES ('测试名', 18, '2022-07-27', '369');
SET n=n+1;
IF n=2000000 THEN
LEAVE loopname;
END IF;
END LOOP loopname;
END;
--执行存储过程
CALL my_insert();2.分页语句
以下sql中select * 写法只是便于测试和展示 实际不要这样使用哦(应该查哪些字段就写哪些字段)!
//查询条数 SELECT count(1) FROM my_tables; 25000021条---0.03秒(count查询真滴快) //只查询索引 SELECT id FROM my_tables limit 20000000,20; 2.965秒 //普通分页查询 SELECT * FROM my_tables limit 20000000,20; 4.441秒 //优化一:子查询方法 SELECT * FROM my_tables where id>=(select id from my_tables limit 20000000,1)limit 20; 2.981秒 //优化二:join查询方法(相比子查询查询速度差不多 速度相比提升30%左右) SELECT * FROM my_tables a JOIN(select id from my_tables limit 20000000,20)b on a.id=b.id; 2.953秒 //优化三:根据主键或者唯一索引排序方法(利用索引快速定位部分数据,避免全表扫描 速度相比提升99%) SELECT * FROM my_tables where id>=20000000 ORDER BY id ASC LIMIT 0,20; 0.038秒
3.实际使用方法:

pageNum:页码
pageSize:一页展示多少条
SELECT * FROM 表名 WHERE id>=(pageNum*pageSize) ORDER BY id ASC LIMIT pageNum,pageSize;4.错误示例:
//当连表查询或子表查询时 limit最好要放在里面 否则查询时间和数据量 将两表数据条数相乘的几何倍增加
错误:
SELECT * FROM a表 a JOIN(select id from a表) b on a.id=b.id limit 0,20;
正确:
SELECT * FROM a表 a JOIN(select id from a表 limit 0,20) b on a.id=b.id;
错误:
select * from (select * from a表 a left join b表 b on a.id = b.id ) tt where ... limit 0,20
正确:
select * from (select * from a表 a left join b表 b on a.id = b.id limit 0,13) tt where ...优化到这里就结束啦 以上sql是测试写法 没有添加where条件等等 大家需要根据实际需求改写哦
若文章有误或疑问,欢迎大家留言讨论~
边栏推荐
- HCIA静态路由综合练习
- This article takes you to understand the commonly used models and frameworks of recommender systems
- HCIA动态主机配置协议实验(dhcp)
- iNFTnews | 看见元宇宙的两面,何谓全真互联网和价值互联网?
- AlterNET Studio用户界面设计功能扩展
- 打印lua内部结构的函数调用
- It's time for bank data people who are driven crazy by reporting requirements to give up using Excel for reporting
- Facebook's automated data analysis solution saves worry and effort in advertising
- QT专题:事件机制event基础篇
- Tencent T8 architect, teach you to learn small and medium R&D team architecture practice PDF, senior architect shortcut
猜你喜欢

Facebook's automated data analysis solution saves worry and effort in advertising

mysql连接池的实现

从零开始入门单片机(一):必会背景知识总结

李航《统计学习方法》笔记之k近邻法

Getting Started with SCM from Scratch (1): Summary of Background Knowledge

【SeaTunnel】从一个数据集成组件演化成企业级的服务

【打新必读】麦澜德估值分析,骨盆及产后康复电刺激产品

【OpenCV】-霍夫变换

边缘计算开源项目概述

Two-dimensional array piecemeal knowledge sorting
随机推荐
QT专题:事件机制event基础篇
RPA助你玩转抖音,开启电商运营新引擎
mysql进阶(二十一)删除表数据与数据库四大特性
node制作一个视频帧长图生成器
ConvNeXt论文及实现
The perceptron perceptron of Li Hang's "Statistical Learning Methods" notes
The k-nearest neighbor method in the notes of Li Hang's "Statistical Learning Methods"
【SeaTunnel】从一个数据集成组件演化成企业级的服务
STL中list实现
AutoJs学习-密码生成器
李航《统计学习方法》笔记之监督学习Supervised learning
Daily practice of dynamic programming (3)
Redis数据结构
2022牛客暑期多校训练营4(ADHKLMN)
Pytorch's LSTM parameters explained
system_error错误处理库学习
用正向迭代器封装实现反向迭代器
向量点积(Dot Product),向量叉积(Cross Product)
打印lua内部结构的函数调用
第15章 泛型