一条sql语句引发mysql不停创建临时表的问题解决..coping to tmp table on desk

(不懂临时表的先看 MySQL临时表 )

首先,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。

创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY

临时表主要用于对大数据量的表上作一个子集,提高查询效率。但是当语句写得有问题则可能会造成不断的创建的临时表,导致磁盘I/O利用率过高。

我之前写了一个存储过程,里面有一条语句,刚开始用了group by ..having,如下

用explain分析该语句可知,该语句会使用临时表(Using temprory),

执行语句后,用SHOW GLOBAL STATUS LIKE ‘Created_tmp_disk_tables‘;和

SHOW GLOBAL STATUS LIKE ‘Created_tmp_tables‘;查看,发现临时表一直在增加

当去掉group by..having再用explain分析,可知,不会再Using temrory

参考文章:

mysql调优三步曲(慢查询、explain profile)

mysql show processlist命令 详解

MySQL临时表

时间: 2024-08-27 23:29:08

一条sql语句引发mysql不停创建临时表的问题解决..coping to tmp table on desk的相关文章

select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?

作为一名 Java开发人员,写 SQL 语句是常有的事,但是你知道 SQL 语句背后的处理逻辑吗?比如下面这条 SQL 语句: select * from user where id=1 执行完这条语句后,我们就会得到 id 为 1 的用户信息.那么对于这一条 SQL 语句,MySQL服务器做了哪些处理呢?这篇文章我们就一起打卡 MySQL 数据库中对 SQL 语句的处理逻辑. 了解 MySQL 数据库的 SQL 语句内部处理逻辑有什么好处?当我们碰到 MySQL 的一些异常或者问题时,就能够直

mysql(1)—— 详解一条sql语句的执行过程

SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同.这有点类似于java中接口的作用,一个接口可以有不同的实现类,不同的实现类对于接口中方法的实现方式可以不同,结果可以相同.这里SQL语言的作用就类似于java中的接口,数据库就类似于java中接口的实现类,SQL语句就类似于java接口中的方法.不同的是java中

mysql -- 一次执行多条sql语句

最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.sql里的所有sql语句,这就涉及到执行多条语句的问题了.软件在CodeIgniter框架上开发的,CodeIgniter有封装好的执行sql语句的函数:$this->db->query('****'),但此函数一次只能执行一条sql语句.所以得另外想办法了.百度了下,找到了一些资料.multi_q

mysql+mybatis 在mybatis一个标签中,执行多条sql语句

然后在mybatis映射文件中的标签中,一般不能执行多条sql,如下: <insert id="addUser" parameterType="User" > insert into t_users (name,password,phone) values (#{name}, #{password},#{phone}); insert into t_dep (depname) values (#{depname}) </insert> MyS

详解一条sql语句的执行过程

SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同.这有点类似于java中接口的作用,一个接口可以有不同的实现类,不同的实现类对于接口中方法的实现方式可以不同,结果可以相同.这里SQL语言的作用就类似于java中的接口,数据库就类似于java中接口的实现类,SQL语句就类似于java接口中的方法.不同的是java中

sql语句(MySQL)

本篇源自网络,整理了sql99标准中增删改查的sql语句以及MySQL特有的语句. 数据库--MySql 数据仓库.就与我们之前学过的纯文本,properties这些技术一样.用来保存数据.并提供对数据进行增删改查的操作.我们以后做项目时,项目中的数据都是保存在数据库中的.//--------------------------------------------------------------------为什么要用数据库,数据库的特点 1>实现数据共享 2>减少数据的冗余度 3>数

java执行多条SQL语句

一次执行多条SQL的技术要点如下: DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能使用new来创建DatabaseMetaData对象,但是可以通过Connection的getMetaData()方法创建.例如:DatabaseMetaData md=con.getMetaData(). DatabaseMetaData类的supportsBatchUpdates方法用于判断此数据库是否支持批量更新.其返回

一条SQL语句的千回百转

SQL语言相信大家都不陌生,从本质上来说,它是一种结构化查询语言,是用来数据库之间的通信的编程语言.作为一名Java程序员,我们从Java角度来看,SQL语言相当于Java接口,而数据库是实现这个接口的实现类,SQL语句则是实现类的方法!!.从这里我们就可以理解了,每个数据库都有着自己独特的规则,但大体上是遵循SQL标准. SQL 语句有一个让大部分人都感到困惑的地方,就是我写的 SQL 语句的跟我预想要的结果不一样.在这里,我们就以 Mysql 数据库为例,对一条 SQL 语句的执行顺序进行分

关于使用一条SQL语句 找出同时符合多个tag条件的记录集合算法

表结构 Tag Table:{tag_id, tag_name}  #标签表 News Table:{news_id, title,......}  #新闻表 NewsTags Table:{tag_id, news_id}  #新闻的标签关系表 解释: 一条新闻,有多个tag标签,例如: 新闻a{Tag1,Tag2, Tag3, Tag4} 新闻b{Tag1,Tag6, Tag7, Tag8} 新闻c{Tag8,Tag9, Tag10, Tag1} 新闻...{Tag..., .....} 搜