сравнение производительности MySQL - PullRequest
0 голосов
/ 02 июня 2009

Что эффективнее и на сколько?

тип 1:

insert into table_name(column1,column2..) select column1,column2 ... from another_table where 

columnX in (value_list)

тип 2:

insert into table_name(column1,column2..) values (column1_0,column2_0..),(column1_1,column2_1..)

Первое издание выглядит коротким, а второе может стать очень длинным, когда value_list содержит, скажем, 500 или даже больше значений.

Но я понятия не имею, чья производительность будет лучше, хотя кажется, что первое должно быть более эффективным, интуитивно понятным.

Ответы [ 2 ]

2 голосов
/ 02 июня 2009

Первый - чище, особенно если ваши столбцы уже в mysql (что, я полагаю, вы говорите?). Вы бы сэкономили некоторое время на сетевой пересылке данных и разборе времени, и вам пришлось бы меньше беспокоиться о достижении любого размера запроса, установленного вашим клиентом.

Однако, как правило, я ожидаю, что производительность будет схожей, поскольку число строк увеличивается, особенно в хорошо проиндексированной таблице. Большую часть времени для вставок с большими запросами тратится на создание индексов (см. здесь ), и оба этих запроса, при отсутствии отключения индексов, должны это делать.

0 голосов
/ 02 июня 2009

Я согласен с Тоддом: первый запрос будет чище и быстрее отправляется на сервер MySQL и быстрее компилируется. И, вероятно, верно, что с увеличением количества вставленных записей разница в скорости будет уменьшаться.

Но первая форма имеет и другие существенные преимущества:

  • Гораздо проще поддерживать: вам нужно только добавлять или изменять поля время от времени.
  • Вы избегаете затрат на запрос другого_таблицы и обработку результатов для объединения второго запроса (скрытая стоимость такого подхода).
  • Если вам нужно запустить это обновление более одного раза, первый запрос может быть кэширован на сервере MySQL вместе с его скомпилированной формой и планом запроса. Это заставляет последующие вызовы запроса выполняться немного быстрее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...