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的执行效率降低,因此需要尽量去避免这种现象的发生。

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

1) 表包含TEXT或者BLOB列;

2) GROUP BY 或者 DISTINCT 子句中包含长度大于512字节的列;

3) 使用UNION或者UNION ALL时,SELECT子句中包含大于512字节的列。

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

用户可以通过以下方式来对其优化:

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

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

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

4) 优化业务逻辑。



参考 

RDS mysql临时表的优化方案

时间: 2024-10-31 23:30:59

MySQL临时表的优化方案的相关文章

MySQL大表优化方案

MySQL大表优化方案 mysql   manong 2016年08月03日发布 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的.而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT.SMALLINT.MEDIU

【重磅推荐】MySQL大表优化方案(最全面)

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的.而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT.SMALLINT.MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED VARCHAR的

mysql 查询重复的数据的SQL优化方案

 在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如:   代码如下: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC;   这条

mysql 查询重复的数据的SQL优化方案_Mysql

在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如: 复制代码 代码如下: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC; 这条

Mysql性能优化方案分享_Mysql

网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化. mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:mysql> show variables; 一.慢查询 m

mysql 性能优化方案

网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与负责,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化,网上找了一篇文章,分页分得乱七八糟的,只能转到博客. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: m

mysql大内存高性能优化方案

8G内存下MySQL的优化 按照下面的设置试试看: key_buffer = 3840M max_allowed_packet = 16M table_cache = 1024 sort_buffer_size = 32M read_buffer_size = 32M read_rnd_buffer_size = 32M myisam_sort_buffer_size = 256M thread_cache_size = 32 query_cache_size = 256M # Try numb

Mysql数据库性能优化一_Mysql

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库. mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. Mysql数据库的优化技术 对mysql优化是

Linux高负载下mysql数据库彻底优化

同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能. 安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境