在数据库里,Temporary Table(临时表)如果设计或使用不当,很容易成为性能瓶颈。下面从使用场景、创建方式、索引、生命周期、替代方案几个角度系统讲一下如何优化。
临时表不是“默认方案”,优先考虑:
WITH t AS (SELECT ...)
SELECT * FROM t JOIN ...
✅ 适合用临时表的情况:
MEMORY 引擎(快,但受限)tmp_table_size
max_heap_table_size
避免大临时表落盘❌ 错误:
SELECT * INTO #tmp FROM big_table
✅ 正确:
SELECT id, col1, col2 INTO #tmp
FROM big_table
WHERE condition
越早过滤,越快:
CREATE TEMPORARY TABLE tmp
SELECT * FROM orders
WHERE create_time > '2024-01-01';
临时表默认没有索引,这是最常见性能问题。
CREATE TEMPORARY TABLE tmp (
id INT,
user_id INT,
INDEX idx_user (user_id)
);
CREATE INDEX ix_tmp_user ON #tmp(user_id);
✅ 原则:
DROP TEMPORARY TABLE IF EXISTS tmp;
WHERE user_id = '123' -- user_id 是 INT
会失效索引
# 表,建索引,注意统计信息UNLOGGED 或 CTEWITH 和 GTT如果你能告诉我:
我可以直接帮你给出针对性优化方案或改写 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。