2017-07-15 89 views
0

我感兴趣以下等价是否成立:SQL查询优化 - 自然分配律加入和差异

NaturalJoin (R,S-T) equivalence Difference(NaturalJoin(R,S),NaturalJoin(R,T)) 

如果是这样,你能给出等价的理由?如果你知道什么查询可以在运行时更加优化,那将会非常有用。

P.S.我想使用LATEX,但是对于stackoverflow来说相当新,我似乎无法得到我的头在这里如何使用它 - math.stackexchange中的标记将只是\[...\]

+0

我不相信这些是相同的。你也应该避免'自然连接',因为这些键没有明确定义 - 并且可能会导致问题。 –

+0

起初我以为他们不是同等的,但我写下了两个例子,他们的工作。你有一个想法,它可能会打破,或者可能是没有明确定义的键作为一个潜在的原因?! – Abbraxas

+0

Google'unicode关联连接'。 – philipxy

回答

1
NaturalJoin (R,S-T) equivalence Difference(NaturalJoin(R,S),NaturalJoin(R,T)) 

一般的方式来处理,这是由它们的定义,以取代运营商的电话。

这是一个概要,假设关系表达式和它们所持有的元组之间具有某些等价关系。其中一个实际上需要使用等价来证明那个人的查询返回了被要求得到的元组,但这通常不被解释。 (经过大量的例子和handwaving学习)

S & T具有相同的一组属性。
X持有行(...)其中X(...),即(...) IN X
NATURALJOIN(X,Y)包含行,其中X(...) AND Y(...)
DIFFERENCE(X,Y)包含行,其中X(...) AND NOT Y(...)

左持有中行:

R(...) AND (S(...) AND NOT T(...)) 
R(...) AND S(...) AND NOT T(...) 

权持有中行:

(R(...) AND S(...)) AND NOT (R(...) AND T(...)) 
(R(...) AND S(...)) AND (NOT R(...) OR NOT T(...)) 
((R(...) AND S(...)) AND NOT R(...)) OR ((R(...) AND S(...)) AND NOT T(...)) 
(R(...) AND S(...) AND NOT R(...)) OR (R(...) AND S(...) AND NOT T(...)) 
R(...) AND S(...) AND NOT T(...) 

所以他们是等价的。

您可以通过x IN X更换X(...)并使用适当的量化(FORALL & FORSOME/EXISTS),并设置推导将此转换为证明({variable|wff})。

重新使用自然连接推理& SQL请参阅this answer及其链接。

如果您知道什么样的查询可以在运行时更加优化,那将非常有用。

这取决于您的DMBS及其查询实施/优化。没有执行模型,成本/收益函数和该函数的输入参数,没有“最优”。此外,“最优”是混乱的 - 关系数据库中的物理DDL,数据库内容&统计信息,查询DML,查询&更新模式和DBMS实现的微小变化可以给出完全不同的折衷。

+0

谢谢!我工作的公司使用Microsoft SQL Server,我私下使用postgreSQL。我会对微软DBMS的效率感兴趣。你有什么想法在哪里可以找到关于这方面的信息?再次感谢您的回答。 – Abbraxas

+0

数据库优化/性能/效率/ etc是一个理论经验的终生学习主题。谷歌整本书。您可以先阅读文档中有关各种DBMS各种实现的主题。 [Wikipedia](https://en.wikipedia.org/wiki/Query_optimization)如何? “最佳”是混乱的 - 需求,关系和实现DDL,DML和DBMS实现中最细微的变化可以给出完全不同的折衷。 PS即使在每一条评论之前,谷歌。大世界在那里。 – philipxy