Быстрее ли вставить отсортированные данные в таблицу Sybase? - PullRequest
4 голосов
/ 26 мая 2010

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

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

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

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

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

Ответы [ 6 ]

2 голосов
/ 26 мая 2010

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

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

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

0 голосов
/ 26 мая 2010

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

0 голосов
/ 26 мая 2010

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

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

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

0 голосов
/ 26 мая 2010

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

0 голосов
/ 26 мая 2010

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

0 голосов
/ 26 мая 2010

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

...