Первичный ключ базы данных - PullRequest
0 голосов
/ 15 июня 2011

Какой из них быстрее иметь ключ базы данных как String или как Long?Если разница составляет микросекунды, это не имеет значения для нашего приложения.В таблице тысячи записей / строк.Если Long быстрее, как преобразовать строку в Long, есть ли какой-нибудь Java API, чтобы уникальная строка могла быть преобразована в уникальную длинную?

Ответы [ 4 ]

2 голосов
/ 15 июня 2011

Как правило, создание, ведение и сканирование индекса VARCHAR (String) должно выполняться медленнее, чем индекс BIGINT (Long).

Чтобы увидеть, важно ли это различиедля вашего случая использования я предлагаю вам создать две таблицы ожидаемого размера и выполнить с ними ожидаемые операции (SELECT, INSERT, UPDATE, DELETE) и измерить результаты ...

Обычно с помощью этого оператора вы можете делегировать работу вашей базе данных:

ALTER TABLE my_table
MODIFY key_column BIGINT NOT NULL;
1 голос
/ 15 июня 2011

Какой из них быстрее иметь ключ базы данных в виде String или Long?

Весьма вероятно, что long быстрее String. С одной стороны, процессоры могут иметь дело со значениями типа long «естественно», в то время как String нужно манипулировать с помощью программного обеспечения. Кроме того, строка, вероятно, будет занимать больше памяти, чем длинное значение, что означает, что кэши находятся под большим напряжением, и необходимо загружать больше данных с / сохранять на диск.

Если разница составляет микросекунды, это не имеет значения для нашего приложения. В таблице тысячи записей / строк.

Так что это зависит от операций. Если вы

Если Long быстрее, как преобразовать строку в Long, есть ли какой-нибудь Java API, чтобы уникальная строка могла быть преобразована в уникальный long?

Вы можете получить int из String, используя хеш-код . Эти целые числа, которые вы получите от этого метода, будут хорошо распределены в пределах допустимого диапазона, но не гарантированно будут уникальными. Как правило, невозможно получить уникальный int из строки, потому что строк строго больше, чем long.

Только представьте, что вы строите гигантскую таблицу, содержащую десятичное представление всех длинных значений. Теперь между ними есть тривиальное отображение строки <->. Но эта таблица по-прежнему не содержит строку «hello world», и больше не осталось длинных, которые можно было бы использовать для представления этой строки.

Обычно мой совет: если ваши исходные данные естественно типа string, используйте их и позвольте базе данных выполнить оптимизацию. Таблица, содержащая «тысячи» записей, не будет проблемой для любой текущей базы данных. Может быть, вы можете помочь производительности, создав умные индексы.

0 голосов
/ 15 июня 2011

Нет разумного способа ответить на это.Первичный ключ - это логическая особенность базы данных, тогда как производительность определяется физической реализацией и тем, какие операции вы хотите выполнить над ней.Вы также можете спросить: «Будет ли красная машина двигаться быстрее, чем синяя?»

Два разных ключевых ограничения для разных типов данных в любом случае не являются функционально эквивалентными.Поэтому, даже учитывая необходимый контекст, было бы странным и, вероятно, не очень полезным сравнением.

0 голосов
/ 15 июня 2011

Базы данных не используют типы Java, которые используют типы SQL, которые могут быть переведены / сопоставлены с Java.

Вам следует использовать тип, который естественно подходит вашему приложению, потому что правильность обычно важнее скорости.

Разница между long, Long и String в Java меньше микросекунды, и если это важно для вас, вам не следует использовать базу данных для поиска, а кэшировать все данныев памяти и использовать коллекцию, такую ​​как TLongObjectHashMap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...