Если целочисленный столбец помечен как первичный ключ в таблице SQLite, следует ли явно создавать для него индекс? SQLite, похоже, не создает автоматически индекс для столбца первичного ключа, но, возможно, он все равно индексирует его с учетом его назначения? (Я буду искать в этом столбце все время).
Будет ли ситуация иной для строкового первичного ключа?
источник
sqlite_master
таблице с именем, начинающимся сsqlite_autoindex_
.UNIQUE
индекс (илиUNIQUE
ограничение) для родительских / ссылочных полей, если они не существуют; то рекомендуется , чтобы ребенок / ссылающееся поле (s) имеет индекс (который , как правило , не будет уникален): здесь видитSQL Data Constraints
здесь говорится: в большинстве случаев ограничения UNIQUE и PRIMARY KEY реализуются путем создания уникального индекса в базе данных. (Исключения составляют INTEGER PRIMARY KEY и PRIMARY KEY в таблицах WITHOUT ROWID.). Значит, ответ не всегда верен?Если столбец помечен как INTEGER PRIMARY KEY, это примерно в два раза быстрее, чем аналогичный поиск, выполненный с указанием любого другого PRIMARY KEY или индексированного значения . Это потому что:
См .: http://www.sqlite.org/lang_createtable.html#rowid
источник
База данных всегда автоматически создает индекс для уникального первичного ключа, чтобы можно было эффективно внутренне проверить его уникальность.
Создав его, он будет использовать при необходимости.
Конечно, он не всегда будет кластеризован, и вы обычно указываете в схеме, если хотите.
источник