我需要通过分析结果和查看的行数来评估理论中的SQL查询。 欢迎任何在线信息链接,因为我无法在任何地方找到有关此问题的帮助。
假设我有2个表,
表示法:|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
R = |A JOIN B|
我的老师说,{A JOIN B}花费150,100通过B和50通过A.但为什么不像前面的例子那样50 * 100?
他进一步表示,在联合成本5000之后应用限制,联合表中的总行数为1500。行数不会是50 * 100?
答案 0 :(得分:1)
如果结果为Cartesian product,则结果中的行数为50 * 100 = 5,000。
也就是说,如果连接上没有条件,那么A的每一行都会连接到B的每一行,并得到一个包含每个行组合的结果。
但是如果连接有一些限制,那么通常会得到一个更小的行集。您的老师假设了一个示例,其中满足条件的两个表之间的组合数给出了1,500行的结果。
5,000行结果将是最好的结果。可能有其他连接条件会产生不同的结果,如果A和B的行组合都不满足条件,甚至可以归零行。