Ответ
Primary key обеспечивает быстрый поиск благодаря индексации. В SQLite (и большинстве БД) primary key автоматически создает clustered index, который физически упорядочивает данные на диске.
При поиске по primary key:
- Используется B-дерево (сбалансированное дерево поиска)
- Время поиска O(log n) вместо O(n) при полном сканировании
- Нет необходимости в дополнительных операциях JOIN или фильтрации
Пример с Room:
@Dao
interface UserDao {
@Query("SELECT * FROM users WHERE id = :userId") // id - primary key
suspend fun getUserById(userId: Int): User?
}
Оптимизации:
- Автоматическое кэширование часто запрашиваемых PK
- Минимальные накладные расходы при обновлении индекса
- Поддержка быстрых операций CRUD
Ответ 18+ 🔞
Ну ты представляешь, как эта штука работает? Primary key — это вообще магия какая-то, ёпта. Берёт и делает твою таблицу не просто кучей записей, а этакой упорядоченной структурой, где всё лежит по полочкам. В SQLite (да и в других базах тоже) стоит тебе объявить primary key, как сразу накидывается clustered index. Это как если бы ты свои носки не в кучу в угол швырял, а аккуратно по ящикам разложил — и найти нужную пару можно за секунду.
Поиск по этому самому ключу — это просто песня, я тебе скажу. Вместо того чтобы перебирать всю таблицу построчно (это O(n), представляешь, какой пиздец при миллионе записей?), база использует B-дерево. Это такая хитрая древовидная структура, сбалансированная, где поиск происходит за O(log n). То есть ты за несколько шагов находишь нужную строчку, даже если их там овердохуища.
Вот смотри, как это в Room выглядит, чтоб совсем понятно было:
@Dao
interface UserDao {
@Query("SELECT * FROM users WHERE id = :userId") // id - primary key
suspend fun getUserById(userId: Int): User?
}
Видишь? Всё просто и элегантно. Никаких лишних телодвижений, JOIN'ов или сложных фильтраций — база сразу знает, куда смотреть.
А ещё какие плюшки идут в комплекте? Автоматическое кэширование тех ключей, к которым ты часто лезешь — чтобы в следующий раз вообще мгновенно. Обновление индекса происходит с минимальными танцами с бубном, и все основные операции CRUD летают просто как угорелые. В общем, primary key — это не просто ограничение целостности, а настоящий перфоманс-костыль, который выручает в самых жопных ситуациях.