У меня есть таблица с миллиардами строк, которая больше не подходит в памяти.Как улучшить производительность вставки на таблице с миллиардами строк?
Когда я вставляю новые строки навалом, накладные расходы на пересчет первичного индекса убивают производительность. Я должен иметь этот индекс, потому что в противном случае инструкции SELECT будут очень медленными. Но так как вставки имеют случайный порядок, каждая вставленная строка должна записываться в другую область диска.
И поскольку жесткий диск ограничен 200 операций ввода-вывода в секунду, это замедляет вставку при сканировании.
Могу ли я «съесть свой пирог и съесть его» в то же время в этой ситуации? Возможно, создав другую таблицу, в которой данные будут сгруппированы по разному столбцу (с использованием другого первичного ключа)? Но это кажется мне расточительным, и я даже не знаю, поможет ли это ...
Или, может быть, я мог бы использовать какой-то промежуточный стол? Вставьте там 1 000 000 строк и затем вставьте их в целевую таблицу, сгруппированную по первичному ключу?
Я обречен?
EDIT:
Я разделил таблицу по горизонтали.
Когда я удалил первичный ключ в этом поле, который мне нужен, и поместил его в поле автоинкремента, вставки были невероятно быстрыми.
К сожалению, поскольку данные на диске размещены по значению первичного ключа, это убило выбранную производительность ... потому что выбор не запрашивает, основываясь на значении автоинкремента, а скорее на значении PK.
Так что либо я вставляю строки быстро, либо я их быстро выбираю. Разве нет решения, которое могло бы помочь в обоих случаях?
Вы действительно используете целую таблицу записей 1b? Если нет - используйте [горизонтальное разбиение] (http://en.wikipedia.org/wiki/Partition_%28database%29) и разделите таблицу на части. Реализация этого зависит от вашей СУБД (вы отметили два из них) –
Откуда вы знаете, что «накладные расходы на пересчет первичного индекса, убивает производительность»? Разметка звучит так, как надо. –
Используете ли вы SQL Server или MySQL? Пожалуйста, отметьте вопросы соответствующим образом. –