雖然這個問題只針對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