MySQL的limit 优化

MySQL的limit 优化,第1张

mysql 5.7.28

按id增序 导出t_order_detail表数据,由于数据量过多,防止一次查询数据量大多导致异常,批量查询数据,每次查询200条数据,数据量50万,查询出的数据量5万多条。

SQL如下

Explain结果

《高性能MySql第三版》章节6.7.5 优化Limit分页中提到,在偏移量非常大的时候,例如可能是LIMIT 1000,20 这样的查询,这时候MySQL需要查询10020条记录然后只返回最后20条,前面10000条记录都将被抛弃,这样的代价非常高。要优化此种查询,要么在页面中限制分页数量,要么是优化大偏移量的性能。使用“延迟关联”,它让MySQL扫描尽可能少的页面,获取需要要访问的记录后再根据关联列回原表查询需要的所有列。

Explain结果

也没看不出来区别,直接用SQL执行看消耗的时间

这个延迟关联蛮简单的(自我感觉),为啥MySQL不直接内部实现优化呢?

延迟关联到底节省了哪部分动作消耗的时间,如果只是如下的SQL,那就根本没必要关联,在查询了其他的字段后,才需要延迟关联。所以是节省了获取其他字段的消耗的时间?还是排序时多个字段后更加耗时?

当前SQL使用id排序,可以直接使用上一页数据最后一条数据的Id做筛选,这样直接筛选出需要的数据,查询查第49999条数据的order_id为707352,SQL如下

Explain结果

此种优化方法要求 使用唯一的字段排序。

高性能MySql

MySQL ORDER BY _ LIMIT performance_ late row lookups at EXPLAIN EXTENDED

首先要确保电脑正常上网,才能通过yum安装。

执行yum install mysql进行安装。并在提示时输入y。

然后系统会自动寻找安装包,并进行安装。下图显示已成功安装完毕。

安装完毕后,尝试启动数据库。

系统提示找不到这个服务。再次看一下安装的包:

#rpm -qa |grep mysql

命令返回空,说明刚才没有安装成功。只好再次安装了。不过这次我们在命令后面加上*号。

看图,需要安装的包还真多!安装完成后,却发现只安装了JDBC和ODBC驱动。

我们在软件库中搜一下带mysql关键字的软件包:

返回的结果显示,软件库中根本就没有mysql软件包。这个时候,迷茫的开始查资料,资料显示在Centos7中用MariaDB代替了mysql数据库。好吧!那我们来安装MariaDB数据库吧!

*** 做方法同上,只不过在命令行里,把mysql改成了mariadb。

安装包一共59M

安装完成。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7448095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存