首页/数据/SQL 速查/临时表的使用与边界
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

临时表的使用与边界

会话级表:适合拆分复杂批处理与中间结果;会话结束自动清理,注意连接池复用与事务语义差异。

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

MySQL

MySQL
CREATE TEMPORARY TABLE tmp_top_users (
  user_id BIGINT PRIMARY KEY,
  total DECIMAL(12,2)
) ENGINE = InnoDB;

INSERT INTO tmp_top_users
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;

DROP TEMPORARY TABLE IF EXISTS tmp_top_users;

PostgreSQL

PostgreSQL
CREATE TEMP TABLE tmp_top_users (
  user_id bigint PRIMARY KEY,
  total numeric(12,2)
) ON COMMIT DROP;   -- 事务提交即清理

INSERT INTO tmp_top_users
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;
生命周期MySQL 会话结束清理;PG 支持 ON COMMIT DROP 控制
可见性仅创建会话可见;不同会话的同名临时表互不干扰
连接池注意连接复用时长生命周期临时表可能残留,用后显式删除

易错点

  • 连接池里长期保留临时表:连接归还后表仍在,后续会话可能读到旧数据或撞名
  • 在临时表上跑重活:临时表写入同样产生 IO 压力,按规模评估

数据来源与参考

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