gpt4 book ai didi

MySQL查询效率建议

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:18 24 4
gpt4 key购买 nike

虽然这个问题是针对 MySQL 的,但我不介意知道这个答案是否适用于一般的 SQL 引擎。

此外,由于这不是语法查询,为了简洁/清晰起见,我使用伪 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]

最佳答案

这是内部查询优化器的工作,用于根据过滤器计算编译连接的最佳顺序。

例如:

SELECT * 
FROM
table1
INNER JOIN table2 ON table1.id = table2.id AND table2.column = Y
INNER JOIN table3 ON table3.id2 = table2.id2 AND table3.column = Z
WHERE
table1.column = X

Mysql(/oracle/sqlserver 等...)将尝试预先计算每个中间结果集以提供最佳性能,实际上引擎在这里做得很好。

然而,一切都依赖于它实际拥有的关于您在架构中设置的表和索引的统计信息。这 2 点(除了用数据填充表...)是您唯一可以影响的,可以通过为优化器提供正确和准确的信息来帮助优化器做出正确的决策。

希望对您有所帮助。

ps: 看看这个。这是关于 oracle 下查询编译中的运算符和优先顺序的,但无论如何了解它可能是一件好事:

http://ezinearticles.com/?Oracle-SQL---The-Importance-of-Order-of-Precedence&id=1597846

关于MySQL查询效率建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13313280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com