临时表支持的索引类型取决于具体的数据库类型。下面按常见数据库分别说明。
USING HASH,但 MySQL 会自动转为 B+Tree(8.0 后基本不可用)CREATE TEMPORARY TABLE tmp_user (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100),
UNIQUE KEY uk_email (email),
INDEX idx_name (name)
);
CREATE TEMP TABLE tmp_order (
id INT,
amount NUMERIC
);
CREATE INDEX idx_amount ON tmp_order(amount);
CREATE INDEX idx_hash_id ON tmp_order USING hash(id);
CREATE GLOBAL TEMPORARY TABLE tmp_emp (
id NUMBER,
name VARCHAR2(50)
) ON COMMIT DELETE ROWS;
CREATE INDEX idx_tmp_emp_id ON tmp_emp(id);
CREATE TABLE #tmp_user (
id INT,
name NVARCHAR(50)
);
CREATE CLUSTERED INDEX IX_tmp_id ON #tmp_user(id);
| 数据库 | 临时表支持索引 | 说明 |
|---|---|---|
| MySQL | B-Tree / 唯一 / 主键 / 全文 | 不支持 Hash(实质) |
| PostgreSQL | 几乎全部索引类型 | 最灵活 |
| Oracle | B-Tree / 唯一 / 函数索引 | 不支持位图索引 |
| SQL Server | 聚集 / 非聚集 / 筛选索引 | 与普通表几乎一致 |
如果你能告诉我具体使用的是哪种数据库和版本,我可以给你更精确、可落地的建议(比如性能优化、是否值得建索引)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。