如果您碰巧插入带有 UUID 的列(这不完全是您的情况)并添加到@Dennis答案(我还不能评论),建议不要使用 gen_random_uuid() (需要 PG 9.4 和 pgcrypto 模块)是(a很多)比 uuid_generate_v4() 快
=# explain analyze select uuid_generate_v4(),* from generate_series(1,10000);
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------
Function Scan on generate_series (cost=0.00..12.50 rows=1000 width=4) (actual time=11.674..10304.959 rows=10000 loops=1)
Planning time: 0.157 ms
Execution time: 13353.098 ms
(3 filas)
对比
=# explain analyze select gen_random_uuid(),* from generate_series(1,10000);
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
Function Scan on generate_series (cost=0.00..12.50 rows=1000 width=4) (actual time=252.274..418.137 rows=10000 loops=1)
Planning time: 0.064 ms
Execution time: 503.818 ms
(3 filas)
此外,这是建议的官方方法
笔记
如果您只需要随机生成的(版本 4)UUID,请考虑使用 pgcrypto 模块中的 gen_random_uuid() 函数。
这将 370 万行的插入时间从约 2 小时减少到约 10 分钟。