2013-04-10 21 views
0

我正在优化mysql将两个表连接在一起的查询,并且有几个where子句和一个order by。是否有一个mysql查询将临时表写入磁盘,它到底是写什么的?

我注意到(使用解释)在查询评估过程中创建了一个临时表。 (因为我在一个表中不是加入队列中的第一个表的字段上的组)

我真的很想知道这个临时表是否正在写入磁盘,结果不告诉我。

这也很好,能够告诉究竟是什么进入临时表。我的where子句中的一些限制是在索引列上,有些则不是,所以我认为mysql可能不会最佳地将行选入临时表中。

具体来说,我的查询基本上是这样的形式:select ... from a join b where ...在索引列和非索引列上同时具有a和b限制。问题在于进入从a中选择的临时表中的行数比我猜想的要多。我想调查一下。

回答

-1

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

解释说明了它在解释您的SQL时试图优化的过程。如果您的where子句的索引很糟糕,或者如果您在联接中使用where子句,那么它可能会在执行时将过量的数据拖入内存并生成最终结果集。这是数据库级别的糟糕表现。

通过在最后一段中读取您的伪代码,我会说你需要一些索引并重写你的Where子句以加入索引字段。发布你的SQL,如果你真的想要一个意见。

+0

不回答用户的问题。用户特别询问他如何能够判断某个特定查询是否将其临时表写入磁盘,以及是否有办法查看首先到达这些临时表的具体内容。 – 2014-11-24 23:23:45

相关问题