我正在编写一个报告库,它提供了一个用于以高级术语描述报告逻辑的 DSL,然后将生成的 AST 编译为针对 MySQL 数据库运行的 SQL。
有时输出包含重复的子查询。我正在考虑让编译器将这些重复的子查询拉到前面CREATE TEMPORARY TABLE AS SELECT ...
的语句中,然后引用生成的临时表,而不是多次运行相同的子查询。
任何对 MySQL 性能有经验的人都可以评论这是否可能是一种有效的策略吗?在内存中检索到a 的结果后SELECT
,将这些结果保存在临时表中是否有任何重大开销?
或者 MySQL 的查询缓存会阻止相同的子查询运行多次吗?
POSTSCRIPT:我认为总的来说,我们的报告将使用的数据量不足以将临时表推送到磁盘。那么,假设它们可以保存在内存中,创建临时表是否有很大的开销?