【问题标题】:Theoretical evaluation of SQL query costSQL查询成本的理论评估
【发布时间】:2017-04-16 21:35:01
【问题描述】:

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

我在课堂上学到了什么

假设我有 2 张桌子,

  • 一个包含 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

我的问题

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

R = |A JOIN B|

我的老师说 {A JOIN B} 花费 150,经过 B 花费 100,经过 A 花费 50。但是为什么这个 50*100 不像前面的示例那样?

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

【问题讨论】:

    标签: mysql sql oracle performance query-optimization


    【解决方案1】:

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

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

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

    5,000 行结果将是最大可能的结果。如果 A 和 B 中的行组合都不满足条件,则可能存在其他连接条件会给出不同的结果,甚至可以减少到零行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多