虽然这个问题是特定于 MySQL 的,但我不介意知道这个答案是否适用于一般的 SQL 引擎。
此外,由于这不是语法查询,为了简洁/清晰,我使用 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] 都针对这个缓存的结果运行?如果不是,我应该像这样将查询分成两部分:
INSERT INTO TEMP ... SELECT ... FROM ... WHERE C[1]...C[N]
SELECT ... FROM TEMP WHERE Q[1]...Q[N]