Необходим ли индекс для первичного ключа в SQLite?
когда целочисленный столбец помечается как первичный ключ в таблице SQLite, должен ли индекс быть явно создан для него? SQLite не создает автоматически индекс для столбца первичного ключа, но, возможно, он индексирует его в любом случае, учитывая его назначение? (Я буду искать на этой колонке все время).
будет ли ситуация отличаться для строкового первичного ключа?
3 ответа:
целочисленные столбцы первичного ключа в сторону, как уникальный, так и первичный ключ ограничения реализуются путем создания индекса в базе данных (в так же, как и оператор" создать уникальный индекс"). Такое индекс используется как и любой другой индекс в базе данных для оптимизации запросы. В результате часто нет никакого преимущества (но значительного накладные расходы) при создании индекса для набора столбцов, которые уже коллективно с учетом ограничения уникального или первичного ключа.
Если столбец помечен целочисленным первичным ключом, это на самом деле вокруг в два раза быстрее, чем аналогичный поиск, выполненный путем указания любого другого первичного ключа или индексированного значения. Это потому, что:
...все строки в таблицах SQLite имеют 64-разрядный целочисленный ключ со знаком, который однозначно идентифицирует строку в своей таблице ... Поиск записи с определенным идентификатором строки или для всех записей с идентификаторами строки в указанном диапазоне примерно в два раза быстрее аналогичного поиска сделано путем указания любого другого первичного ключа или индексированного значения.
с одним исключением, отмеченным ниже, если таблица rowid имеет первичный ключ, который состоит из одного столбца и объявленный тип этого столбца "INTEGER" в любой смеси верхнего и нижнего регистра,затем столбец становится псевдонимом для rowid.
такой столбец обычно называют "целочисленным первичным ключом". Один Столбец первичного ключа становится только целочисленным первичным ключом если объявленный имя типа-это точно "целое число". Другие имена целочисленных типов, такие как" INT " или "BIGINT" или "SHORT INTEGER "или" unsigned INTEGER " вызывает первичное ключевой столбец, который будет вести себя как обычный столбец таблицы с целочисленным сродством и уникальный индекс, а не как псевдоним для rowid.