Вопрос по sql – Почему пакетные вставки / обновления быстрее? Как работают пакетные обновления?

36

Error: User Rate Limit Exceeded

Как работают пакетные обновления? Предполагая, что таблица не имеет ограничений уникальности, операторы вставки действительно не влияют на другие операторы вставки в пакете. Однако во время пакетных обновлений обновление может изменить состояние таблицы и, следовательно, может повлиять на результат других запросов на обновление в пакете.

Я знаю, что запросы на пакетную вставку имеют синтаксис, в котором у вас есть все значения вставки в одном большом запросе. Как выглядят запросы на пакетное обновление? Например, если у меня есть отдельные запросы на обновление формы:

update <table> set <column>=<expression> where <condition1>
update <table> set <column>=<expression> where <condition2>
update <table> set <column>=<expression> where <condition3>
update <table> set <column>=<expression> where <condition4>

Что происходит, когда они используются в партии. Как будет выглядеть отдельный запрос?

Error: User Rate Limit Exceeded

Ваш Ответ

4   ответа
0

update mytable
set myfield = 'test'
where myfield is null

Error: User Rate Limit Exceeded
4

Bulk insert with placeholders in PostgreSQL >= 9.1

INSERT INTO mytable (col1, col2, col3)
 VALUES (unnest(?), unnest(?), unnest(?))

Bulk update with placeholders in PostgreSQL >= 9.1

update mytable 
  set value = data_table.new_value
  from 
    (select unnest(?) as key, unnest(?) as new_value) as data_table
  where mytable.key = data_table.key

COPY INTO ... FROM STDIN

27

Error: User Rate Limit Exceeded

The query doesn't need to be reparsed. The values are transmitted in one round-trip to the server The commands are inside a single transaction

Is it because the connection and setup overhead for inserting a single row is the same for a set of rows?

Error: User Rate Limit Exceeded

How do batch updates work?

Error: User Rate Limit ExceededRDBMS.

Error: User Rate Limit ExceededOracleError: User Rate Limit ExceededJOIN.

Error: User Rate Limit ExceededPostgreSQLError: User Rate Limit ExceededMySQLError: User Rate Limit Exceeded

INSERT
INTO    mytable
VALUES 
        (value1),
        (value2),
        …

Error: User Rate Limit Exceeded

Assuming the table has no uniqueness constraints, insert statements don't really have any effect on other insert statements in the batch. But, during batch updates, an update can alter the state of the table and hence can affect the outcome of other update queries in the batch.

Error: User Rate Limit Exceeded

I know that batch insert queries have a syntax where you have all the insert values in one big query. How do batch update queries look like?

Error: User Rate Limit ExceededOracleError: User Rate Limit Exceeded

MERGE
INTO    mytable
USING   TABLE(:mycol)
ON      …
WHEN MATCHED THEN
UPDATE
SET     …

Error: User Rate Limit ExceededPostgreSQL:

UPDATE  mytable
SET     s.s_start = 1
FROM    (
        VALUES
        (value1),
        (value2),
        …
        ) q
WHERE   …
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededStatement.addBatch()Error: User Rate Limit ExceededStatement.executeBatch()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededdocs.oracle.com/cd/B28359_01/server.111/b28318/…
Error: User Rate Limit Exceeded
24

INSERT INTO mytable (mykey, mytext, myint)
VALUES 
  (1, 'text1', 11),
  (2, 'text2', 22),
  ...

UPDATE mytable
SET 
  mytext = myvalues.mytext,
  myint = myvalues.myint
FROM (
  VALUES
    (1, 'textA', 99),
    (2, 'textB', 88),
    ...
) AS myvalues (mykey, mytext, myint)
WHERE mytable.mykey = myvalues.mykey

Error: User Rate Limit Exceededstackoverflow.com/questions/55052395/…

Похожие вопросы