gpt4 book ai didi

mysql - 将 MySQL 子查询的结果保存到 TEMPORARY TABLE 中的开销(而不是复制子查询)?

转载 作者:行者123 更新时间:2023-11-29 03:05:04 25 4
gpt4 key购买 nike

我正在编写一个报告库,它提供一个 DSL 来以高级术语描述报告逻辑,然后将生成的 AST 编译成针对 MySQL 数据库运行的 SQL。

有时输出包含重复的子查询。我正在考虑让编译器将这些重复的子查询拉到前面的 CREATE TEMPORARY TABLE AS SELECT ... 语句中,然后引用生成的临时表而不是多次运行相同的子查询。

任何有 MySQL 性能经验的人都可以评论这是否可能是一种有效的策略?在内存中检索到 SELECT 的结果后,将这些结果保存在临时表中是否会产生重大开销?

或者 MySQL 的查询缓存会阻止相同的子查询运行多次吗?

POSTSCRIPT:我认为一般来说,我们的报告将处理的数据量不足以将临时表推送到磁盘。那么,假设它们可以保存在内存中,创建临时表的开销是否很大?

最佳答案

我认为这在很大程度上取决于 mysql 的版本,因此您可能需要考虑限制您的报告库将在哪些 mysql 版本上运行(如果您还没有)。

我的一般理解是 MySQL 子查询很糟糕,转换为实际连接或使用临时表几乎总是更好 - 除非临时表被推送到磁盘!

我会阅读 mysql 提供的文档作为了解最新信息的良好起点:dev.mysql.com/doc/internals/en/transformations.html 和 dev.mysql.com/doc/refman/5.5/en/优化子查询.html

关于mysql - 将 MySQL 子查询的结果保存到 TEMPORARY TABLE 中的开销(而不是复制子查询)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019932/

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