Является ли обновление на rowid самым быстрым способом обновления большой базы данных sqlite? - PullRequest
1 голос
/ 19 июня 2019

Я использую 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 миллионов записей происходит за считанные минуты, так что, похоже, это решит мою проблему, так как только обновление / удаление занимает вечность - но мне кажется, что я что-то упустил, чтобы это было самым быстрым способомдобиться того, чего я хочу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...