如何在SQL中优化笛卡尔积查询

时间:2012-08-13 18:48:29

标签: sql query-optimization cartesian-product

我在SQL中的几个表中查询笛卡尔积。

如果我查询

SELECT * FROM TABLE1, TABLE2, ... , TABLE n   WHERE ....

可能很快。

它让我说,只有1-3次点击。

现在,如果我查询更多的表,

SELECT * FROM TABLE1, TABLE2, ... , TABLE n, TABLE n+1, ..., TABLE m   WHERE ....
它慢慢地崩溃了。

为什么呢? sql从最后一个表开始遍历所有组合吗?

我的优化问题:

我应该选择TABLE 1作为最近缩小和过滤搜索的表,还是最后一个TABLE m?

或者还有什么?

2 个答案:

答案 0 :(得分:3)

你的头衔说明了一切 - 笛卡儿的产品。除非您在各个表之间指定连接条件,否则数据库服务器将尝试生成每个记录组合。当您添加表格时,这种增长非常快,例如5个表格,10 = 10 ^ 5,100,000条记录。

您需要使用正确的连接技术(左,右,内)连接子句来缩小记录集。

答案 1 :(得分:0)

在3个桌子上加入几张桌子也很慢。 解决方案可以是选择

的一些乘法

类似的东西:

SELECT * FROM TABLE1, 
  (SELECT * FROM TABLE2, 
     (SELECT * FROM TABLE3, 
        (..)
      WHERE ..) 
   WHERE .. )
WHERE
 ...