首页/数据/SQL 速查/CTE、派生表与临时表怎么选

CTE、派生表与临时表怎么选

单语句内拆解逻辑用 CTE;同一中间结果被多处引用、需要索引或跨语句复用时用临时表。

SQL 速查数据更新于 2026-10-12

临时表示例

临时表示例
CREATE TEMPORARY TABLE tmp_user_total (
    user_id BIGINT PRIMARY KEY,
    total   DECIMAL(12,2)
);

INSERT INTO tmp_user_total
SELECT user_id, SUM(amount)
FROM orders
GROUP BY user_id;

SELECT u.name, t.total
FROM users u
JOIN tmp_user_total t ON t.user_id = u.id;
CTE单语句作用域;可读性好;物化与否由优化器决定
临时表会话级;可建索引、可 ANALYZE;适合复用的大中间结果
派生表只出现一次、逻辑简单的子查询

易错点

  • MySQL 临时表在会话结束时自动删除,连接池下注意复用与数据残留
  • 把大结果写入临时表会带来额外 IO,是否划算用实际执行时间验证

数据来源与参考

  • MySQL 8.0 Reference Manual · CREATE TEMPORARY TABLE
  • PostgreSQL Documentation · CREATE TABLE AS
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌