0

选择 *
从 (
        (SELECT table1.id1,​​ table1.id1_type AS id1,
         FROM 子 AS table2 STRAIGHT_JOIN 父 AS table1 ON table1.id1=table2.id1
         AND table1.id2=table2.id2
         AND table1.time=table2.time
         在哪里 table1.id1=123456
           AND ((table1.time>=0
                 AND table1.time<=1361936895)))
      联合所有
        (选择 table1.id1 作为 id1,table1.id1_type
         FROM child AS table2 STRAIGHT_JOIN step_parent AS table1 ON table1.id1=table2.id1
         AND table1.id2=table2.id2
         AND table1.time=table2.time
         在哪里 table1.id1=123456
                 AND table1.time<=1361936895)))) AS T
没有 id1_type 的地方 (15)
按时间 DESC LIMIT 2000 排序

我正在使用以下 sql 查询(两个联接,一个联合全部),并且在内部添加联接后,我看到延迟严重增加。我可以看到我的机器上的存储空间使用量猛增,我想知道是不是因为我正在创建临时表?

作为添加的上下文,当我添加连接时,我还添加了“table1”、“table2”别名,这样我可以在选择列时避免歧义,我开始看到这些空间使用量增加了。

任何有关此添加或整个查询为何会导致这些查询出现巨大存储峰值的建议将不胜感激:)

4

1 回答 1

2

由数据库引擎决定它认为什么是完成查询的最佳策略。假脱机到临时表绝对是它的选项之一。

表别名真的不应该与它有任何关系,右列是右列,无论您使用什么标签。

出于兴趣,您是否尝试使用 join 而不是 Straight_join?您通过指定 straight_join 来限制查询优化器的选项。

于 2013-03-14T04:17:17.337 回答