在哪些情况下INNER JOIN(SELECT ...不能使用临时表重写

时间:2009-09-18 11:20:56

标签: sql postgresql join subquery

我正在使用GridSQL,每当SQL模式INNER JOIN(SELECT出现)时我都会遇到一些性能问题。因此我考虑将所有这些查询重写为两个查询,一个使用完全select语句创建临时表,另一个查询加入使用临时表,因此模式将是INNER JOIN temp_table(...)。

在哪些情况下这不起作用?你可能会怀疑,我希望这个问题没有答案。 ;)

3 个答案:

答案 0 :(得分:1)

唯一一次子选择不能轻易地分解到临时表中的时候是它引用外表中的字段。

对于“... INNER JOIN(SELECT ...”我怀疑你会遇到这个问题(或者如果它甚至可能,我不记得曾经尝试过),因为你应该仅仅指的是来自加入条件中的第一个表。

答案 1 :(得分:1)

我认为临时表不会加速你的查询!相反,您应该优化您的查询。你可以做的事情:

  • 在将记录与其他记录集内连接之前过滤记录
  • 定义正确的索引

-Pavel

答案 2 :(得分:0)

  

在哪些情况下INNER JOIN(SELECT   ...不能使用临时表重写

如果要用临时表替换的查询可能导致结果集很大,我会避免使用临时表。产生它的开销将抵消任何可能的收益。