天天看点

MySQL临时表的优化方案RDS mysql临时表的优化方案

mysql 是全球最受欢迎的开源数据库,作为开源软件组合 lamp(linux + apache + mysql

+ perl/php/python)中的重要一环,广泛应用于各类应用。web2.0

时代,风靡全网的社区论坛软件系统 discuz 和博客平台 wordpress 均基于 mysql 实现底层架构。web3.0 时代,阿里巴巴、facebook、google 等大型互联网公司都采用更为灵活的

mysql 构建了成熟的大规模数据库集群。阿里云数据库

mysql 版基于 alibaba 的 mysql 源码分支,经过双 11 高并发、大数据量的考验,拥有优良的性能和吞吐量。除此之外,阿里云数据库 mysql 版还拥有经过优化的读写分离、数据压缩、智能调优等高级功能。

在云数据库rds for mysql存在临时表的概念。包含“内存临时表”和“磁盘临时表”两种,其中内存临时表可以在控制台上通过tmp_table_size来设置其大小,通过这个设置可以将临时结果存储在内存中以供调用。当session生成的临时内容超过了内存临时表的配额后就会将内存临时表的数据转存到磁盘临时表。磁盘临时表由于需要通过磁盘物理文件来存放,会导致sql的执行效率降低,因此需要尽量去避免这种现象的发生。

<b>而下面的这些使用场景一定会使用到临时表:</b>

1) 表包含text或者blob列;

2) group by 或者 distinct 子句中包含长度大于512字节的列;

3) 使用union或者union all时,select子句中包含大于512字节的列。

可使用explain查看执行计划,extra列看到using temporary就意味着使用了临时表。

<b>用户可以通过以下方式来对其优化:</b>

1) 对group by和order by的列进行优化,添加索引;

2) 将较大的text或者blob列拆分成多个较小的列;

3) 对大量的group by和order by语句做拆分;

4) 优化业务逻辑。

<b>参考</b>