虽然这个问题只针对MySQL,但我不介意知道这个答案是否适用于SQL引擎。MySQL查询效率建议
此外,由于这不是语法查询,因此为了简洁明了,我使用了psuedo-SQL。假设C [1] .. C [M]是一组标准(由AND或OR分隔),Q [1] .. Q [N]是另一个集合(由OR分隔)。我想用C [1] ... C [M]来过滤表格,并且从这个过滤表格中,我想要所有与Q [1] ... Q [N]匹配的行。
如果我是这样做:
SELECT ... FROM ... WHERE (C[1]...C[M]) AND (Q[1]...Q[N])
这会自动优化,使得C [1] ... C [M]发现只有一次,每个Q [i]是针对这个缓存运行'ed结果?如果不是这样,我应该那么查询分成两个像这样:
INSERT INTO TEMP ... SELECT ... FROM ... WHERE C[1]...C[N]
SELECT ... FROM TEMP WHERE Q[1]...Q[N]
可悲的是,这个问题有点过于宽泛:查询,方案的细节和RDBMS将会影响答案。在当前版本的MySQL中,除了简单的布尔简化和可以使用索引的子句的优先次序之外,我认为优化器会选择一些不确定的次序来对剩余子句进行延迟评估。我不相信有没有什么办法可以在不通过另一个表的情况下影响这一点(尽管在多个查询中可以使用子查询中的物化表而不是临时表)。 – eggyal