1

我在 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?

或者还有什么?

4

2 回答 2

3

您的标题说明了一切 - 笛卡尔积。除非您在各个表之间指定连接条件,否则数据库服务器将尝试生成所有可能的记录组合。当您添加表时,它会快速增长,例如 5 个表,10 = 10^5,100,000 条记录。

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

于 2012-08-13T18:55:36.023 回答
0

在 3 张桌子上加入几张桌子也很慢。解决方案可以是选择的一些乘法

类似的东西:

SELECT * FROM TABLE1, 
  (SELECT * FROM TABLE2, 
     (SELECT * FROM TABLE3, 
        (..)
      WHERE ..) 
   WHERE .. )
WHERE
 ... 
于 2012-08-13T18:58:16.260 回答