Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit dbbe95b

Browse files
committed
Как ускорить добавление строк через INSERT ... VALUES ...?
1 parent 655655f commit dbbe95b

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

‎README.md‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
**[Модификация пользовательских данных (DML)](#модификация-пользовательских-данных-dml)**
6969
1. [Как добавить или обновить записи одним запросом (UPSERT)?](#как-добавить-или-обновить-записи-одним-запросом-upsert)
7070
1. [Как сделать `INSERT ... ON CONFLICT ...` без увеличения последовательности для дубликатов?](#как-сделать-insert--on-conflict--без-увеличения-последовательности-для-дубликатов)
71+
1. [Как ускорить добавление строк через `INSERT ... VALUES ...`?](как-ускорить-добавление-строк-через-insert-values)
7172
1. [Как модифицировать данные в нескольких таблицах и вернуть id затронутых записей в одном запросе?](#как-модифицировать-данные-в-нескольких-таблицах-и-вернуть-id-затронутых-записей-в-одном-запросе)
7273
1. [Как модифицировать данные в связанных таблицах одним запросом?](#как-модифицировать-данные-в-связанных-таблицах-одним-запросом)
7374
1. [Как добавить запись с id, значение которого нужно сохранить ещё в другом поле в том же INSERT запросе?](#как-добавить-запись-с-id-значение-которого-нужно-сохранить-ещё-в-другом-поле-в-том-же-insert-запросе)
@@ -1242,6 +1243,36 @@ returning id;
12421243
table t1_id_seq; -- "last_value" is 3
12431244
```
12441245

1246+
### Как ускорить добавление строк через `INSERT ... VALUES ...`?
1247+
1248+
Вместо запроса типа
1249+
1250+
```sql
1251+
INSERT INTO t1 (col1, col2, col3)
1252+
VALUES
1253+
($1, $2, $3),
1254+
($4, $5, $6),
1255+
...,
1256+
($2998, $2999, $3000);
1257+
```
1258+
1259+
используйте запрос
1260+
```sql
1261+
INSERT INTO t1 (col1, col2, col3)
1262+
SELECT *
1263+
FROM unnest(
1264+
$1::timestamptz[],
1265+
$2::text[],
1266+
$3::float8[]
1267+
)
1268+
```
1269+
1270+
Трюк в том, что на `INSERT VALUES` тратится много времени на планирование запроса (обрабатывается каждое значение), а на `INSERT UNNEST` нет.
1271+
1272+
Детальная информация:
1273+
* https://www.timescale.com/blog/boosting-postgres-insert-performance
1274+
* https://www.timescale.com/blog/benchmarking-postgresql-batch-ingest
1275+
12451276
### Как модифицировать данные в нескольких таблицах и вернуть id затронутых записей в одном запросе?
12461277

12471278
```sql

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /