博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL分页优化
阅读量:6164 次
发布时间:2019-06-21

本文共 1348 字,大约阅读时间需要 4 分钟。

hot3.png

MySQL分页优化:

SQL: select * from t_user u order by id limit 5000000, 10分析:mysql会读取5000010条数据,然后只返回最后10条,查询的时间很长。优化方案:	方案一:只允许查询前面的数据,不允许查询特别靠后的数据。eg:百度搜索出的结果,最多七十多页。	方案二:在查询下一页时把上一页最后一条数据的id(lastId)传过来,即:select * from t_user u where id > 5000000 order by id limit 10		注意:如果where条件中的判断条件还有其它非主键列,则需要建立复合索引,复合索引中必须包含where语句中的列。	方案三:延迟关联非索引列,即:select * from t_user u1 inner join (select id from t_user  order by id limit 5000000, 10 ) u2 on u1.id=u2.id实验:	环境:win7下MySQL5.6		t_user表中有6,274,934条数据,以下是t_user的建表语句:		CREATE TABLE `t_user` (			`id` BIGINT(20) NOT NULL AUTO_INCREMENT,			`bu_id` INT(20) NOT NULL,			`name` VARCHAR(255) NOT NULL,			`age` INT(11) NOT NULL,			`sex` VARCHAR(255) NULL DEFAULT NULL,			PRIMARY KEY (`id`)		)		COLLATE='utf8_general_ci'		ENGINE=InnoDB;	select * from t_user u order by id limit 5000000, 10	# 2.746 sec		只有这一个查询sql时,查询所需的时间。	# 25.615 sec	有一个不断往t_user表中插新数据的函数(或过程)一直在跑的情况下,执行上面的sql查询出数据所需的时间。		select * from t_user u where id > 5000000 order by id limit 10	# 0.047 sec		只有这一个查询sql时,查询所需的时间。	# 0.063 sec		有一个不断往t_user表中插新数据的函数(或过程)一直在跑的情况下,执行上面的sql查询出数据所需的时间。	select * from t_user u1 inner join (select id from t_user  order by id limit 5000000, 10 ) u2 on u1.id=u2.id	# 2.137 sec		只有这一个查询sql时,查询所需的时间。	# 13.604 sec	有一个不断往t_user表中插新数据的函数(或过程)一直在跑的情况下,执行上面的sql查询出数据所需的时间。

转载于:https://my.oschina.net/u/1399755/blog/1811081

你可能感兴趣的文章
将字符串或数字倒序输出
查看>>
Spring Security的HTTP基本验证示例
查看>>
计算机存储单位以及内存原理
查看>>
大型分布式网站架构技术总结
查看>>
Linux 文件系统权限小结-基本权限-粘滞位-ACL
查看>>
第4周第4课:gzip、bzip2、xz
查看>>
ASP.NET Core 自动检查编译项目组件配置
查看>>
正则表达式——反义
查看>>
android压缩图片,并将其转化成base64提交到服务器
查看>>
python 发送email
查看>>
<转>冯唐谈跑步
查看>>
炒冷饭系列:设计模式 单例模式
查看>>
微软双机双柜方案讨论
查看>>
嵌入式ctags跳转和全局打印日志
查看>>
[技术文档]Linux从入门到精通
查看>>
我的友情链接
查看>>
解决IP地址冲突的问题
查看>>
惠普瘦客户机多屏显示T5740
查看>>
java边界问题
查看>>
jdbc 使用properties导入数据库信息
查看>>