【发布时间】:2012-08-13 18:48:29
【问题描述】:
我在 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?
或者还有什么?
【问题讨论】:
-
您没有优化笛卡尔积-您避免它! :-)
-
如果你应用
WHERE条件,它就不再是一个纯笛卡尔积了。您的情况如何? -
另见:[要踢的坏习惯:使用旧式 JOIN](sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using- old-style-joins.aspx) - 这在避免不需要的笛卡尔积时也很有帮助!
-
我同意 marc_s - 你想要一个笛卡尔积(这似乎不太可能 - 行数将是所涉及表的所有行数的乘积),或者你不想要它( 99% 以上的情况都是这样)。
-
Mark Byers:MySQL——感谢所有 cmets,他们已经提供了帮助。 弗兰克·施密特:确实。每张桌子的点击率都会迅速下降。 ——我的想法是这样的。每增加一张桌子,病例就会迅速减少。可以说,每张桌子减少到 1/1000 的情况。所以我只需要检查 (1/1000)^n 个案例。 --- marc_s:谢谢。 --- 我会检查这个帖子。
标签: sql query-optimization cartesian-product