Быстрее ли вставлять отсортированные данные в таблицу Sybase?

Таблица в Sybase имеет уникальный столбец varchar(32) и несколько других столбцов. Он также индексируется в этом столбце.

Через равные промежутки времени мне нужно его усекать и заполнять свежими данными из других таблиц.

insert into MyTable  
  select list_of_columns  
  from OtherTable  
  where some_simple_conditions  
  order by MyUniqueId  

Если мы имеем дело с несколькими тысячами строк, поможет ли это ускорить insert, если у нас есть предложение order by для select? Если да, компенсирует ли это выигрыш во времени дополнительное время, необходимое для заказа запроса select?

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


person AngryWhenHungry    schedule 26.05.2010    source источник


Ответы (6)


Имея всего несколько тысяч строк, вы вряд ли заметите большую разницу, даже если это немного быстрее. Если вы ожидаете приблизиться к 10 000 строк или около того, именно тогда вы, вероятно, начнете видеть заметную разницу — попробуйте создать большой набор тестовых данных и провести тест, чтобы увидеть, поможет ли это.

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

Еще одна мысль: в зависимости от того, как Sybase выполняет индексирование, передача отсортированного списка может замедлить его. Попробуйте сравнить с ORDER BY RANDOM(), чтобы увидеть, так ли это.

person Steve Simms    schedule 26.05.2010

Я не верю в скорость упорядочения в INSERT, поэтому не запускайте ORDER BY в тщетной попытке улучшить производительность.

person duffymo    schedule 26.05.2010

Я бы сказал, что на самом деле не имеет значения, в каком порядке вы выполняете эти функции. Просто используйте обычный способ вставки INSERT INTO, а затем сделайте все остальное.

person bmeulmeester    schedule 26.05.2010

Не могу сказать о sybase, но MS SQL вставляет быстрее, если записи тщательно отсортированы. Сортировка может свести к минимуму количество расширений индекса. Как вы знаете, лучше заполнить таблицу ant, чем создать index. Сортировка данных перед вставкой приводит к аналогичному эффекту.

person Anton Burtsev    schedule 26.05.2010

Порядок, в котором вы вставляете данные, обычно не повышает производительность. Проблемы, влияющие на скорость вставки, больше связаны с механизмами хранения данных в вашей базе данных, чем с порядком вставки.

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

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

person Tendayi Mawushe    schedule 26.05.2010

Удаление и воссоздание индексов (по крайней мере, на SQL-сервере) — лучший способ вставки. По крайней мере, иногда ;-) А если серьезно, если вы не замечаете каких-либо серьезных проблем с производительностью, не связывайтесь с этим.

person Dayton Brown    schedule 26.05.2010