Я заполняю таблицу среднего размера (60 ГБ, 500 миллионов строк). Процесс завершается достаточно быстро, если в таблице нет первичного ключа (~ 1 час с использованием массовой вставки), но он занимает ~ 10 раз дольше, если я создаю эту таблицу с первичным ключом. Я предполагаю, что это связано с тем, что для проверки ограничения уникальности требуется время, а также обновление индекса для каждой вставки.Проблема с первичным ключом
Я думал, что хорошим решением будет добавить первичный ключ позже, поскольку индексация на уже заполненной таблице должна быть намного быстрее по сравнению с инкрементной индексацией. Но sqlite, похоже, не имеет возможности добавлять первичный ключ после создания таблицы (не знаете почему?).
Я думаю, я мог бы просто не использовать первичный ключ вообще, а вместо этого просто добавить уникальный индекс после заполнения таблицы. Есть ли недостаток?
Или любое лучшее решение рекомендуется?
Но в соответствии с вашим ответным ответом первичный ключ может иметь преимущество в производительности, если оно находится в столбце INTEGER? – max
Да, но ваша таблица использовала другой тип. –
НЕПРАВИЛЬНЫЙ КЛЮЧ INTEGER не ускользнул от вставки. –