按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
安装完成。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)