mysql临时表

mysql中在使用select语句进行查询的时候也可能会用到临时表,而如果用到临时表会导致性能大打折扣,甚至会给线上带来很大的问题,下面针对mysql临时简单介绍一下:

1.mysql临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用MYSQL的MEMORY存储引擎,磁盘临时表使用MYSQL的MyISAM存储引擎;大多数情况下,MYSQL会优先创建内存临时表,但是内存临时表超过配置指定的值后,MYSQL会将内存临时表导出到磁盘临时表,导出到磁盘临时表的过程中,就会出现大量的IO读写,严重影响机器性能;

2.使用临时表的场景有以下几种情况:

(1)ORDER BY 字句和GROUP BY字句不同,例如:ORDER BY price GROUP BY name

(2)在JOIN查询中,ORDER BY 和GROUP BY使用的不是第一个表的列

(3)ORDER BY 中使用distinct关键字

3.直接使用磁盘临时表的场景:

(1)表中包含TEXT或者BLOB列

(2)GROUP BY或者DISTINCT字句中包含大于512字节的列

4.使用临时表会导致性能大大降低,尤其是使用磁盘临时表,因此应该避免使用临时表,需要做到以下几点:

(1)在GROUP BY或者ORDER BY的列上创建索引

(2)分拆列,一般情况下,TEXT BLOB或者大于512字节长度的列,基本上都是为了显示信息,而不会用于查询条件,在表设计的时候把这种列移到另外一张表中。

(3)如果表的设计已经确定,可以通过优化SQL提高SQL的执行效率:拆分SQL语句或者优化业务,去掉分组排序等操作

5.如何查看是否使用临时表,使用explain,Extra列看到Using temporary,就是使用了临时表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值