Использование текста в качестве первичного ключа в таблице SQLite плохо?
плохо ли иметь текст в качестве первичного ключа в базе данных SQLite? Я слышал, что это плохо по причинам производительности, это правда? И будет ли rowid использоваться в качестве фактического первичного ключа в таком случае?
3 ответов
плохо ли иметь текст в качестве первичного ключа в базе данных SQLite? Я слышал что это плохо из-за производительности, это правда?
Я никогда не слышал, чтобы кто-то использовал строку в качестве первичного ключа в таблице. Для меня (и я честно надеюсь также на других) очень "некрасиво" потренирует С очень низкой производительностью.
Если вы будете использовать строку в качестве первичного ключа, вы должны думать о несколько вещей:
- будет сочетание 3 символов достаточно?
- или я должен использовать 5 символов?
здесь каждая строка должна иметь тот же формат (читаемость вопрос, конечно), а также быть уникальным. О! Вот следующий "копилка работ" ->
вам нужно будет создать некоторые "уникальный генератор строку" это создаст уникальный1 строковый идентификатор2.
а также есть следующие вопросы-это хорошо подумайте:
- более длинные строки
=
автоматически все труднее и труднее сравнивать - размер таблицы радикально повышается, потому что довольно ясно, что строка имеет гораздо больший размер как число
- количество строк - это безумие, чтобы использовать строку в качестве первичного ключа, если вы таблица может иметь 1000+ строк
Это более сложная тема, но я хотел бы сказать, что ОК, для очень маленьких таблиц можно было бы использовать строки в качестве первичного ключа (если он делает sence), но если вы посмотрите на недостатки, гораздо лучше использовать номер в качестве первичного ключа наверняка!
и какой вывод?
Я не рекомендую вам использовать строку в качестве первичного ключа. У него больше недостатков как преимуществ (у него действительно есть какое-то преимущество?).
использование числа в качестве первичного ключа намного лучше (я боюсь сказать, лучший) практика.
и rowid будет использоваться как фактический первичный ключ в таком случае?
Если вы будете использовать строку в качестве основного не.
1в реальных строках редко бывают уникальными.
2конечно, вы можете сказать, что вы можете создать идентификатор из имени элемента в строке, но это еще раз код спагетти (элементы могут иметь то же имя).
плохо ли иметь текст в качестве первичного ключа в базе данных SQLite? Я слышал, что это плохо по причинам производительности, это правда?
С точки зрения правильности, TEXT PRIMARY KEY
все в порядке.
С точки зрения производительности, предпочитают INTEGER
ключи. Но, как и в случае с любой проблемой производительности, измерьте ее самостоятельно, чтобы увидеть, есть ли существенная разница с вашими данными и вариантами использования.
и rowid будет использоваться в качестве фактического первичный ключ в таком случае?
только INTEGER PRIMARY KEY
получает псевдоним с ROWID
. Другие виды первичных ключей этого не делают, и будет неявный целочисленный rowid, если это. ссылка.
в реальном мире использование строк в качестве первичного ключа имеет много преимуществ, если мы говорим о UUIDs. Возможность создания сущности "паспорт" именно в момент ее создания может значительно упростить асинхронный код и/или распределенную систему (если речь идет о более сложной архитектуре мобильного клиента / сервера).
Что касается производительности, я не нашел никакой измеримой разницы при запуске бенчмарка для выполнения 10000 поисков первичного ключа, как в действительности, база данных индексы не хранят и не сравнивают строки при выполнении индексированных поисков.