mysql查询是否将临时表写入磁盘?它到底在写入什么?

mysql查询是否将临时表写入磁盘?它到底在写入什么?,mysql,Mysql,我正在优化一个mysql查询,该查询将两个表连接在一起,并有几个where子句和orderby 我注意到(使用explain)在查询求值期间创建了一个临时表。(因为我在一个表中的字段上分组,而该表不是联接队列中的第一个表) 我很想知道这个临时表是否正在写入磁盘,解释结果没有告诉我 若能说出临时表中的确切内容,那个也会很好。我的where子句中的一些限制是针对索引列的,而另一些则不是,因此我认为mysql可能没有最佳地将行拾取到临时表中 具体来说,我的查询基本上是这样的:select。。。从a到b

我正在优化一个
mysql
查询,该查询将两个表连接在一起,并有几个where子句和orderby

我注意到(使用explain)在查询求值期间创建了一个临时表。(因为我在一个表中的字段上分组,而该表不是联接队列中的第一个表)

我很想知道这个临时表是否正在写入磁盘,解释结果没有告诉我

若能说出临时表中的确切内容,那个也会很好。我的where子句中的一些限制是针对索引列的,而另一些则不是,因此我认为mysql可能没有最佳地将行拾取到临时表中


具体来说,我的查询基本上是这样的:select。。。从a到b在哪里。。。对索引列和非索引列的a和b都有限制。问题是从中选择的临时表中的行数超出了我的预期。我想调查一下

所有数据库都使用一个内存区域或工作区域来执行查询,并将根据您构建查询的方式在这些内存区域中使用临时表。如果连接多个表,则可能会使用多个表来构建最终结果集。只要用户登录,这些临时表通常就存在于内存中

Explain演示了它在解释SQL时试图优化的过程。如果您有一个索引不良的where子句,或者如果您在联接中使用where子句,则在执行和构建最终结果集时,可能会将过多的数据拉入内存。这就是DB级别的低性能


通过阅读上一段中的伪代码,我想说您需要一些索引,并重写Where子句以连接索引字段。如果您真的想发表意见,请发布您的SQL。

不会回答用户的问题。用户特别询问他如何判断某个特定查询是否正在将其临时表写入磁盘,以及是否有办法首先查看这些临时表中到底有什么内容。