Я использую Sqlite в C # и имею очень большую базу данных (около 6 миллионов записей) - я использовал select rowid from debug_all_table where rule=X
, чтобы получить список из примерно 10000 строк, которые мне нужно обновить (используя столбец игнорирования - update to ignore=1
) или удалите как можно быстрее.
Первоначально я пытался удалить строки, но обнаружил, что это очень медленно, и обнаружил, что люди говорят, что удаление было медленным процессом.Я переключился на попытку обновить столбец игнорирования с 0 на 1 - сначала искал другое значение в строке - однако это заняло несколько часов.Я думал, что переключение на использование индекса (в данном случае rowid
) ускорит процесс, так как он просто будет искать этот rowid
и удалять эту строку, вместо того, чтобы проверять каждую строку в БД, чтобы увидеть,значение определенного столбца соответствовало тому, что я запрашивал для каждой из 10000 строк, которые должны быть удалены - кажется, это все еще занимает часы.
Правильно ли я считаю, что следующий способ - лучший способ обновления на rowid
:
update debug_all_table set ignore=1 where rowid=@rowid
Или это все еще ищет каждый ряд каждый раз и проверяет rowid
?Есть ли более эффективный способ сделать это?
Моя последняя мысль состоит в том, что я мог бы просто вставить те, которые я не хочу игнорировать, во временную таблицу, удалить исходную таблицу и снова вставить в нее (этонеобходимо сделать аналогичные обновления в цикле).Вставка начальных 6 миллионов записей происходит за считанные минуты, так что, похоже, это решит мою проблему, так как только обновление / удаление занимает вечность - но мне кажется, что я что-то упустил, чтобы это было самым быстрым способомдобиться того, чего я хочу?