powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / На сколько числовой id быстрее строкового?
25 сообщений из 38, страница 1 из 2
На сколько числовой id быстрее строкового?
    #35254458
Crazier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваяю базу данных. В ее состав входит таблица документов (рассчитываемый объем ~ 2 млн записей).
Делать id числовым (int) не совсем корректно по логике приложения. Строковым (varchar(128)) опасаюсь по производительности. Но знаний катастрофически не хватает.

Вопрос: на сколько оправданы мои опасения? (примерно, во сколько раз будет медленнее)

И еще, разумно ли в данном случае делать id хешем?

PS
База данных PostgreSQL или MySQL.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35254647
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего это зависит от SQL-сервера, а нормальному SQL-серверу по барабану. Смущает только один момент, использование сортировок,групировок и т.д. которые могут вообще работать неправильно при таком типе ключа.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35254669
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazierДелать id числовым (int) не совсем корректно по логике приложения
ИМХО не совсем корректно делать ID строковым с точки зрения проектирования БД...
будет работать медленне примерно во "много" раз...
хотябы по размеру поля в байтах прикиньте разницу в int и char(10)...
сделайте тесты... потом нам расскажете во сколько раз точно:)
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35254693
Crazier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, противоречивые ответы.

Не знаю, на сколько корректно однозначно судить по размеру байтов. Можно сравнивать ведь не полностью поля, а поэтапно (побайтно, например). Тогда упорядоченные строковые индексы будут тормозить не так сильно.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35254750
Осака Вестингауз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id должен только идентифицировать запись. Не надо накладывать на него никакой информационной нагрузки из предметной области.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35254952
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на эту тему уже не один десяток страниц форума исписали, ищите по словосочеатниям "суррогатный ключ", "естесственный ключ"
например, тынц

Имхо, обычно лучше делать суррогатный (искусственный) ключ в числовой форме. Но бывают (хоть и не многочисленные) ситуации, когда естесственный удобнее.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35256385
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazierИ еще, разумно ли в данном случае делать id хешем?
Совсем неразумно.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35256624
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazierДелать id числовым (int) не совсем корректно по логике приложения.
Судя по этой строке, Вы собираетесь взвались на id какие-то неправильные функции. Лучше бросить эту затею.

CrazierСтроковым (varchar(128)) опасаюсь по производительности.
На эту тему гугль выдаст миллионы ссылок подробных обсуждений.

CrazierИ еще, разумно ли в данном случае делать id хешем?
Смотря с какой точки зрения. Если планируется очень активная вставка в эту таблицу из кучи сессий, это может быть одним из решений проблемы "горячего блока", если такая проблема актуальна. А вообще - игры разума на пустом месте.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35256881
Фотография krazana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну сделайте тогда это поле текстовым если у вас на то есть причины и не ставьте на него ключ )
а возьмите еше одно числовое поле в качестве id
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35257338
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crazier пишет:

> Делать id числовым (int) не совсем корректно по логике приложения.
> Строковым (varchar(128)) опасаюсь по производительности. Но знаний
> катастрофически не хватает.

> Вопрос: на сколько оправданы мои опасения? (примерно, во сколько раз
> будет медленнее)

Оправданы.

Но твой вопрос надо было бы переформулировать в следующем виде:
"Насколько длинный идентификатор хуже короткого" ?
То есть если что-то и будет хуже, то не потому, что первичный ключ
строковый, а потому, что он длинный - в 16-32 раза длинней.
А вот длинный первичный ключ - это плохо.
И к тому же я не верю, что тебе для идентификации документа нужна
именно такая вот длинная строка.

> И еще, разумно ли в данном случае делать id хешем?

Хэшем чего ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35257342
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ пишет:
> Скорее всего это зависит от SQL-сервера, а нормальному SQL-серверу по
> барабану. Смущает только один момент, использование

Ну неправда. Нифига не по барабану. Чем длинней ключ, тем меньше
ключей влезает на страницу индекса, больше нужно хранить страниц в индексе,
выше становится индекс и снижается его эффективность, поскольку
надо делать больше чтений для позиционированию по индексу.
Это, конечно же, не катастрофическое снижение производительности
(отношение сложностей обоих вариантов - константа, т.е. задачи имеют
одну и ту же сложность), но все же.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35257348
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНу неправда. Нифига не по барабану. Чем длинней ключ, тем меньше
ключей влезает на страницу индекса, больше нужно хранить страниц в индексе,
По барабану, по барабану. Эти аргументы повторялись тысячи раз; когда начинаются расчеты с цифрами, все оказывается не так, как представляется теоретически на пальцах. В частности, от глубины индекса мало что зависит, поскольку его корневые блоки напрочь кэшируются, крайне редко модифицируются, а следовательно читаются без каких-либо задержек, почти с нулевыми тратами. Основной недостаток длинного ключа - выполнение "масштабных чтений" индекса, прежде всего index full scan, когда надо таки заметно больше прочитать с диска.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35257350
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кифирчик пишет:

> ИМХО не совсем корректно делать ID строковым с точки зрения
> проектирования БД...

с точки зрения проектирования - как раз абсолютно корректно.

> будет работать медленне примерно во "много" раз...

Ну не во много раз будет разница, разница будет
в отношении высот деревьев поиска. Это, допустим, 4 и 5.
Или 4 и 6. Что-то в таком роде, но не во "много-много" раз.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35257398
Crazier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы. Имелся ввиду хеш внутреннего названия и номера документа.

Оставлю id числовым на данный момент. Когда появится база для импорта, попробую на тестовой машине сгенерировать строковые id и сравнить производительность. Результаты сообщу.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35257509
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazierСпасибо за ответы. Имелся ввиду хеш внутреннего названия и номера документа.

Оставлю id числовым на данный момент. Когда появится база для импорта, попробую на тестовой машине сгенерировать строковые id и сравнить производительность. Результаты сообщу.

Это тема для форумов PostgreSQL или MySQL.
В зависимости от СУБД, и даже в зависимости от настройки СУБД результаты могут отличаться.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35257692
rata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CrazierДелать id числовым (int) не совсем корректно по логике приложения. Строковым (varchar(128)) опасаюсь по производительности. Но знаний катастрофически не хватает.

Вопрос: на сколько оправданы мои опасения? (примерно, во сколько раз будет медленнее)

И еще, разумно ли в данном случае делать id хешем?

.

Если логике приложения есть дело до первичного ключа БД - надо что то менять. Либо в логике, либо в команде :-).
Ставьте INT автоинкрементный в качестве первичного ключа- и забудте про него :-)
Строковый - генерить надо как-то (надеюсь, Вы не планируете использовать естественный ключ? :-). Сдается мне- на этапе генерения и будут потери в производительности.
Опасаетесь проблемм со слиянием данных из разных баз , а думать над процедурой слияния лень - ну, попробуйте UNIQUEIdentifier, на Ваших объемах разницы не заметите.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35258914
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crazier пишет:

> Спасибо за ответы. Имелся ввиду хеш внутреннего названия и номера документа.

Хэш не может быть уникальным идентификатором по определению.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35276830
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще учитывайте такой момент: строковый (и вообще любого типа естественный) ключ часто помогает уменьшить соединения таблиц в запросах. Грубо говоря (за суть примера не пинайте, он надуманный, просто для иллюстрации), вместо

SELECT CL.NAME, STR.NAME
FROM CLIENTS CL, STREETS STR
WHERE CL.STREET_ID = STR.ID

можно будет написать

SELECT CL.NAME, CL.STREET_NAME
FROM CLIENTS CL

, потому что STREET_NAME, хотя и ссылается через внешний ключ на таблицу STREETS, но в CLIENTS хранится в полной форме.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35276939
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир П.Еще учитывайте такой момент: строковый (и вообще любого типа естественный) ключ часто помогает уменьшить соединения таблиц в запросах. Грубо говоря (за суть примера не пинайте, он надуманный, просто для иллюстрации), вместо

SELECT CL.NAME, STR.NAME
FROM CLIENTS CL, STREETS STR
WHERE CL.STREET_ID = STR.ID

можно будет написать

SELECT CL.NAME, CL.STREET_NAME
FROM CLIENTS CL

, потому что STREET_NAME, хотя и ссылается через внешний ключ на таблицу STREETS, но в CLIENTS хранится в полной форме.Не соглашусь. Вы говорите не о выборе между строковыми/числовыми ключами, а о выносе части данных в отдельную сущность, что уже изменяет логику базы.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35276955
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft Владимир П.Еще учитывайте такой момент: строковый (и вообще любого типа естественный) ключ часто помогает уменьшить соединения таблиц в запросах. Грубо говоря (за суть примера не пинайте, он надуманный, просто для иллюстрации), вместо

SELECT CL.NAME, STR.NAME
FROM CLIENTS CL, STREETS STR
WHERE CL.STREET_ID = STR.ID

можно будет написать

SELECT CL.NAME, CL.STREET_NAME
FROM CLIENTS CL

, потому что STREET_NAME, хотя и ссылается через внешний ключ на таблицу STREETS, но в CLIENTS хранится в полной форме.Не соглашусь. Вы говорите не о выборе между строковыми/числовыми ключами, а о выносе части данных в отдельную сущность, что уже изменяет логику базы.Простите, наврал, прочитал ваш пост снизу вверх. Но все равно не соглашусь, т.к. вы предлагаете просто денормализацию базы, а не критерий выбора строкового или числового ключа.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35277088
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир П. пишет:
> Еще учитывайте такой момент: строковый (и вообще любого типа
> естественный)

Не строковый, а именно естественный. (точнее - не дополнительный
суррогатный ключ в данной таблице). При этом ключ может быть
вообще любого типа, в том числе и числового. Зачем вы здесь
поднимаете эту тему, если это вообще никак не связано с обсуждаемым
вопросом - абсолютно не понятно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35279848
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Зачем вы здесь
поднимаете эту тему, если это вообще никак не связано с обсуждаемым
вопросом - абсолютно не понятно.


Автор темы пишет: " Делать id числовым (int) не совсем корректно по логике приложения ."
Но опасается неудовлетворительной производительности. Предлагает заменить идентификацию строкой на идентификацию дополнительным (по сути суррогатным) числовым полем.

Я показываю, что если сохранить тестовое представление (которое, очевидно, есть естественный атрибут в рамках его предметной области), можно в некоторых случаях не только не уменьшить, но и увлеичить производительность.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35282941
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Но твой вопрос надо было бы переформулировать в следующем виде:
"Насколько длинный идентификатор хуже короткого" ?
То есть если что-то и будет хуже, то не потому, что первичный ключ
строковый, а потому, что он длинный - в 16-32 раза длинней.
А вот длинный первичный ключ - это плохо.
И к тому же я не верю, что тебе для идентификации документа нужна
именно такая вот длинная строка.

Все же может иметь значение не тока длинна, но и суррогатность ключа: значения такого ключа менять, скорее всего, предется реже. В случае использования ключа в ссылочной целостности это может иметь значение в общем случае.
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35287222
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo пишет:

> Все же может иметь значение не тока длинна, но и суррогатность ключа:
> значения такого ключа менять, скорее всего, предется реже.

Значение первичного ключа вообще-то никогда не меняется,
разве что в нештатных случаях.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
На сколько числовой id быстрее строкового?
    #35287231
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЗначение первичного ключа вообще-то никогда не меняется,
Суррогатного первичного ключа - во-первых. Необходимость менять значение - таки один из врожденных недостатков естественных ключей.

Во-вторых, штатные случаи тоже бывают, хотя и очень нечасто. Скажем, есть такой подход: если нужен независимый ввод справочников в куче мест, то вводимые записи украшаются отрицательными id и реплицируются в центр, где изменения сливаются и приобретают "правильный" номер.
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / На сколько числовой id быстрее строкового?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]