我在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?
或者还有什么?
答案 0 :(得分:3)
你的头衔说明了一切 - 笛卡儿的产品。除非您在各个表之间指定连接条件,否则数据库服务器将尝试生成每个记录组合。当您添加表格时,这种增长非常快,例如5个表格,10 = 10 ^ 5,100,000条记录。
您需要使用正确的连接技术(左,右,内)连接子句来缩小记录集。
答案 1 :(得分:0)
在3个桌子上加入几张桌子也很慢。 解决方案可以是选择
的一些乘法类似的东西:
SELECT * FROM TABLE1,
(SELECT * FROM TABLE2,
(SELECT * FROM TABLE3,
(..)
WHERE ..)
WHERE .. )
WHERE
...