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

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

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

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

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

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

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

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

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

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

Оправданы.

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

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

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

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

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

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

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

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

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

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

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

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

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

.

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

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

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

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
24.04.2008, 12:52
    #35276939
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На сколько числовой id быстрее строкового?
Владимир П.Еще учитывайте такой момент: строковый (и вообще любого типа естественный) ключ часто помогает уменьшить соединения таблиц в запросах. Грубо говоря (за суть примера не пинайте, он надуманный, просто для иллюстрации), вместо

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
24.04.2008, 12:54
    #35276955
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На сколько числовой id быстрее строкового?
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
24.04.2008, 13:22
    #35277088
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На сколько числовой id быстрее строкового?
Владимир П. пишет:
> Еще учитывайте такой момент: строковый (и вообще любого типа
> естественный)

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


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

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

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

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

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

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

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


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