You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+31Lines changed: 31 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,6 +68,7 @@
68
68
**[Модификация пользовательских данных (DML)](#модификация-пользовательских-данных-dml)**
69
69
1.[Как добавить или обновить записи одним запросом (UPSERT)?](#как-добавить-или-обновить-записи-одним-запросом-upsert)
70
70
1.[Как сделать `INSERT ... ON CONFLICT ...` без увеличения последовательности для дубликатов?](#как-сделать-insert--on-conflict--без-увеличения-последовательности-для-дубликатов)
71
+
1.[Как ускорить добавление строк через `INSERT ... VALUES ...`?](как-ускорить-добавление-строк-через-insert-values)
71
72
1.[Как модифицировать данные в нескольких таблицах и вернуть id затронутых записей в одном запросе?](#как-модифицировать-данные-в-нескольких-таблицах-и-вернуть-id-затронутых-записей-в-одном-запросе)
72
73
1.[Как модифицировать данные в связанных таблицах одним запросом?](#как-модифицировать-данные-в-связанных-таблицах-одним-запросом)
73
74
1.[Как добавить запись с id, значение которого нужно сохранить ещё в другом поле в том же INSERT запросе?](#как-добавить-запись-с-id-значение-которого-нужно-сохранить-ещё-в-другом-поле-в-том-же-insert-запросе)
@@ -1242,6 +1243,36 @@ returning id;
1242
1243
table t1_id_seq; -- "last_value" is 3
1243
1244
```
1244
1245
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` нет.
0 commit comments