温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL的分页优化方案

发布时间:2021-09-16 11:41:28 来源:亿速云 阅读:134 作者:chen 栏目:云计算

本篇内容主要讲解“MySQL的分页优化方案”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的分页优化方案”吧!

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查询出数据所需的时间。

到此,相信大家对“MySQL的分页优化方案”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI