SQL - Индексированный первичный ключ - разница в производительности 64-битное Int против 8-символьной строки - PullRequest
0 голосов
/ 21 июня 2020

Допустим, вы разрабатываете таблицу SQL (postgresql или sqlite), и у вас есть 2 варианта первичного ключа: (1) 64-битное целое число (автоматически увеличивающееся, индексируемое) (2) Строка размером 8 байт (8 символов) первые несколько букв которого зависят от времени, следовательно, могут быть отсортированы, а также проиндексированы.

Будет ли какой-либо недостаток производительности / хранения при выборе версии String? Поскольку оба они занимают 8 байт и индексируются и сортируются по времени (или порядку вставки), они также должны иметь одинаковую скорость для запросов SELECT?

1 Ответ

1 голос
/ 21 июня 2020

Будет ли какой-либо недостаток производительности / хранилища при выборе версии String?

Строки намного сложнее, чем кажется. Например:

  • Символы ASCII или Unicode?
  • Что такое сопоставление?
  • Тип данных char() или varchar()?

Все это влияет на сравнения и стоимость - в большинстве баз данных. С другой стороны, целые числа просты. Они просто бинарные представления. Конечно, они могут быть объявлены как беззнаковые, а не подписанные, но это один вариант по сравнению со многими со строками.

SQLite использует систему тайных типов данных, совершенно отличную от других баз данных (и от стандартных SQL), хранящих тип со значением, а не с определением столбца. Я не знаю, как это повлияет на производительность индексов в этой базе данных.

...