SQLITE: лучшие практики по использованию AUTOINCREMENT - PullRequest
0 голосов
/ 08 октября 2018

Согласно официальному руководству :

"Ключевое слово AUTOINCREMENT накладывает дополнительные затраты ресурсов процессора, памяти, дискового пространства и дискового ввода-вывода, и его следует избегатьесли не строго необходимо. Обычно не требуется. "

Так что лучше не использовать его?Есть ли у вас какие-либо критерии использования неявного rowid против AUTOINCREMENT?

1 Ответ

0 голосов
/ 10 октября 2018

Как рекомендуется в документации, лучше не использовать AUTOINCREMENT, если только вы не хотите убедиться, что псевдоним rowid (он же id) больше, чем любой, который был добавлен.Однако (при обычном использовании) это спорный вопрос как таковой, даже если без AUTOINCREMENT, пока вы не достигнете 9223372036854775807 строк, тогда будет получен более высокий идентификатор строки / id.

Если вы достигнете id / rowid 9223372036854775807, вот и все, если у вас есть AUTOINCREMENT, как исключение SQLITE_FULL.Хотя без AUTOINCREMENT будут предприняты попытки получить неиспользуемый идентификатор / rowid.

AUTOINCREMENT добавляет строку (таблицу, если требуется) в sqlite_sequence, которая записывает самый высокий выделенный идентификатор.Разница между с и без AUTOINCREMENT заключается в том, что на таблицу sqlite_sequecence ссылаются, а без AUTOINCREMENT - нет.Таким образом, если удаляется строка с наивысшим идентификатором, AUTOINCREMENT получает наивысший из когда-либо выделенных идентификаторов из таблицы sqlite_sequence (а пользователь - наибольший из этого или max(rowid)), без этого не использует наивысший в таблице, где строкавставляется (эквивалентно max(rowid)).

При ограниченном тестировании было установлено, что накладные расходы в 8-12% являются накладными расходами в соответствии с Каковы издержки использования AUTOINCREMENT для SQLite на Android?.

...