首页/数据/数据库速查/临时表与派生表(FROM 子查询)
本包目录(495 条)
MySQL 基础与连接36 条
SQL 语法52 条
用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条Redis 运维与场景124 条

临时表与派生表(FROM 子查询)

临时表用于会话内暂存中间结果;派生表把子查询当作表参与连接;8.0 优化器常把派生表合并展开。

数据库速查数据更新于 2026-10-12
用途中间结果承载
临时表CREATE TEMPORARY TABLE(会话级)
派生表FROM (SELECT …) AS t

临时表用法

临时表用法
CREATE TEMPORARY TABLE tmp_top (user_id BIGINT PRIMARY KEY, total DECIMAL(14,2));
INSERT INTO tmp_top
SELECT user_id, SUM(amount) FROM orders GROUP BY user_id ORDER BY SUM(amount) DESC LIMIT 100;
SELECT * FROM tmp_top;
DROP TEMPORARY TABLE tmp_top;

派生表用法

派生表用法
SELECT t.user_id, t.total FROM (
  SELECT user_id, SUM(amount) AS total FROM orders GROUP BY user_id
) AS t WHERE t.total > 10000;
临时表在会话结束自动清理;派生表内存/磁盘落点由 derived_merge 与临时表参数影响。

易错点

  • 临时表与普通表同名时优先访问临时表,容易造成「数据明明在却查不到」的假象
  • 大派生表可能被物化成内部临时表并落磁盘,重点关注 EXPLAIN 的 Materialize

数据来源与参考

  • MySQL 8.0 Reference Manual: CREATE TEMPORARY TABLE Statement

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌