SQL查询开销的理论评估

时间:2017-04-16 21:35:01

标签: mysql sql oracle performance query-optimization

我需要通过分析结果和查看的行数来评估理论中的SQL查询。 欢迎任何在线信息链接,因为我无法在任何地方找到有关此问题的帮助

我在课堂上学到了什么

假设我有2个表,

  • A包含100个元组
  • B包含500个元组。

表示法:|A| is the number of tuples after the query {A} is the number of tuples examined to produce the query

我已被证明

R = |A JOIN B| = 500 (we take the biggest of the two)
{A JOIN B} = 100 * 500 = 50 000 (we need to check every tuple)

R' = |R WHERE NO=1| = 5 (we suppose each no has 5 occurences)
{R'} = 500 (we had to loop through the 500)

R'' = |R'[name]| ~5
{R''} = 5

我的问题

  • A包含50个元组
  • B包含100个元组。

R = |A JOIN B|

我的老师说,{A JOIN B}花费150,100通过B和50通过A.但为什么不像前面的例子那样50 * 100?

他进一步表示,在联合成本5000之后应用限制,联合表中的总行数为1500。行数不会是50 * 100?

1 个答案:

答案 0 :(得分:1)

如果结果为Cartesian product,则结果中的行数为50 * 100 = 5,000。

也就是说,如果连接上没有条件,那么A的每一行都会连接到B的每一行,并得到一个包含每个行组合的结果。

但是如果连接有一些限制,那么通常会得到一个更小的行集。您的老师假设了一个示例,其中满足条件的两个表之间的组合数给出了1,500行的结果。

5,000行结果将是最好的结果。可能有其他连接条件会产生不同的结果,如果A和B的行组合都不满足条件,甚至可以归零行。