|
|
1
1
这里有一种不太数学的方法来找到你要找的多项式。您可以使用 fiddle 你设法找到前几个数字的结果。之后,您可以使用 WolframAlpha . 结果是:x^4/24-x^3/4+35*x^2/24-13*x/4+3。 |
|
|
2
1
读到你对性能和大O符号的评论,我突然明白了你在追求什么——或者至少我想我明白了。 具有 n 作为表中元素的数量,第一次选择的性能为O( n ):
第二次选择时,您是对的。它提供( n *( n -1) )/2排。因为方程的平方部分对于大 n ,您可以同时删除减法(-1)和除法(/2)。性能为O( n ). 回到您的SQL查询,这意味着您可以简单地删除JOIN子句中的条件。它可以简化为:
第三次选择中的LEFT JOIN将具有相同的效果。一个简单的左联接ON(s1.id<s2.id)将返回额外的n*(-1)行,而INNER join不会返回这些行。在big-O表示法中,这仍然是O( n ),包含或不包含WHERE子句。所以LEFT JOIN与否,都是一样的。因此,您的第三个选择将跟随O( n )对于大型 n .
根据先前的理解,很容易看出您的第四次SELECT归结为
很容易看出O()是如何跟随样本表的记录数和自联接数的。 唯一需要回答的问题是“WHERE right side.id is NULL”如何影响系统。根据定义,“SELECT FROM a,LEFT JOIN b where b.key IS NULL”只能返回与表a中相同数量或更少的行。因此,选择可以简化为:
数据库是否真的这样执行,或者它是否会构建完整的笛卡尔乘积,然后消除绝大多数行,这取决于数据库的查询优化器的实现,并且必须根据特定的数据库实现来回答。最坏的情况是,数据库将执行如下操作:
我希望这能回答你的问题。如果没有,我很抱歉。。。但即使在那时,我仍然很喜欢剖析你的疑问:) |
|
|
Bard.Mus · 迁移后的数据库字符集环境 1 年前 |
|
Efannnnnn · 将Id数据存储到任何页面 1 年前 |
|
|
yooooo · 用于在块中删除的存储过程-LOOP未执行 1 年前 |
|
John Beasley · 更新一定数量记录的连续日期 1 年前 |
|
|
ColinM · MySQL以前的结果查询返回不正确的值 1 年前 |
|
Sergey_Z · MySQL只需无条件连接2个表和交叉连接 1 年前 |