在数据库开发里,**临时表(Temporary Table)**通常用于“中间结果需要复用、或逻辑复杂、或需要会话/事务隔离”的场景。下面按“什么时候该用、什么时候不该用”来说明。
如果一个计算结果要在后续多个步骤中反复使用:
-- 先算一次,后面多次用
CREATE TEMPORARY TABLE tmp_user_stat AS
SELECT user_id, COUNT(*) AS cnt
FROM orders
GROUP BY user_id;
✅ 适合:
当子查询很大、很复杂时,临时表可以让执行计划更稳定:
CREATE TEMPORARY TABLE tmp_active_user
SELECT user_id FROM user WHERE status = 1;
然后再:
SELECT * FROM orders o
JOIN tmp_active_user t ON o.user_id = t.user_id;
✅ 好处:
临时表通常:
适合:
例如:
INSERT INTO real_table
SELECT * FROM tmp_clean_data;
在存储过程中:
SELECT * FROM orders WHERE status = 1;
直接用子查询或视图更好。
临时表有:
频繁创建反而更慢。
很多时候加索引比临时表更有效。
| 场景 | 推荐 |
|---|---|
| 一次性计算 | 子查询 / CTE |
| 多次复用 | 临时表 |
| 跨会话共享 | 普通表 / 物化视图 |
| 只读逻辑结构 | 视图 |
| 复杂分析 | CTE(WITH) |
TEMPORARY TABLE,会话级TEMP TABLE,会话级GLOBAL TEMPORARY TABLE,事务/会话级#表(局部)、##表(全局)如果你有具体数据库 + 业务场景(比如报表、接口、ETL),我可以帮你判断“用不用临时表、怎么用最合适”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。