首页 文章

此SQL查询是否创建临时表?

提问于
浏览
0
SELECT *
FROM (
        (SELECT table1.id1, table1.id1_type AS id1,
         FROM child AS table2 STRAIGHT_JOIN parent AS table1 ON table1.id1=table2.id1
         AND table1.id2=table2.id2
         AND table1.time=table2.time
         WHERE table1.id1=123456
           AND ((table1.time>=0
                 AND table1.time<=1361936895)))
      UNION ALL
        (SELECT table1.id1 AS 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
         WHERE table1.id1=123456
                 AND table1.time<=1361936895)))) AS T
WHERE id1_type NOT IN (15)
ORDER BY time DESC LIMIT 2000

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

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

关于为什么这个添加或整个查询导致这些查询出现大量存储高峰的任何建议都将不胜感激:)

1 回答

  • 2

    由数据库引擎决定它认为什么是实现查询的最佳策略 . 绕过临时表绝对是它的选择之一 .

    表别名实际上不应该与它有任何关系,右列是右列,无论你使用什么标签 .

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

相关问题