postgresql - 创建没有数据的表非常慢
问题描述
我在 PostgreSQL 11 上运行这个 SQL 命令:
CREATE TABLE IF NOT EXISTS my_temp_table AS TABLE my_enormous_table WITH NO DATA;
制作新表需要 5 分钟。
是EXPLAIN ...
:
Seq Scan on my_enormous_table (cost=0.00..35999196.34 rows=143407234 width=3278)
移动到类似查询CREATE TABLE ... (SELECT * FROM my_enormous_table WHERE FALSE);
的速度要快几个数量级 - 没有 seq 扫描,结果是一样的。
任何想法可能导致此问题?
解决方案
WITH NO DATA
仍然执行查询,它只是忽略结果。
更好的方法是避免CREATE TABLE ... AS
:
CREATE TABLE my_temp_table (LIKE my_enormous_table);
这也允许您使用该INCLUDING
子句从原始表中复制默认值、存储参数、约束和其他内容:
CREATE TABLE my_temp_table (LIKE my_enormous_table
INCLUDING CONSTRAINTS INCLUDING DEFAULTS);
推荐阅读
- node.js - 使用 knex.js 在数组中插入多个数据时检查数据是否存在
- python - Tensorflow 在验证集上的准确性非常低
- mule - 关于 Mulesoft 和 DataWeave 的问题
- sql - JPA - 确保没有预留与所需预留发生冲突
- reactjs - react-redux state undefined of props - 功能组件
- javascript - CKeditor 将光标放在开头
- php - 如何在 laravel 中使用 2 foreach
- javascript - 如何使用javascript计算两点之间的距离?
- python - AWS Lambda:如何获取环境变量
- node.js - 如何在 Nodejs 中使用 multer-s3 上传多个文件