|
|
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Ваяю базу данных. В ее состав входит таблица документов (рассчитываемый объем ~ 2 млн записей). Делать id числовым (int) не совсем корректно по логике приложения. Строковым (varchar(128)) опасаюсь по производительности. Но знаний катастрофически не хватает. Вопрос: на сколько оправданы мои опасения? (примерно, во сколько раз будет медленнее) И еще, разумно ли в данном случае делать id хешем? PS База данных PostgreSQL или MySQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2008, 19:17 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Скорее всего это зависит от SQL-сервера, а нормальному SQL-серверу по барабану. Смущает только один момент, использование сортировок,групировок и т.д. которые могут вообще работать неправильно при таком типе ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2008, 21:40 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
CrazierДелать id числовым (int) не совсем корректно по логике приложения ИМХО не совсем корректно делать ID строковым с точки зрения проектирования БД... будет работать медленне примерно во "много" раз... хотябы по размеру поля в байтах прикиньте разницу в int и char(10)... сделайте тесты... потом нам расскажете во сколько раз точно:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2008, 22:01 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Хм, противоречивые ответы. Не знаю, на сколько корректно однозначно судить по размеру байтов. Можно сравнивать ведь не полностью поля, а поэтапно (побайтно, например). Тогда упорядоченные строковые индексы будут тормозить не так сильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2008, 22:25 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
id должен только идентифицировать запись. Не надо накладывать на него никакой информационной нагрузки из предметной области. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2008, 23:30 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
на эту тему уже не один десяток страниц форума исписали, ищите по словосочеатниям "суррогатный ключ", "естесственный ключ" например, тынц Имхо, обычно лучше делать суррогатный (искусственный) ключ в числовой форме. Но бывают (хоть и не многочисленные) ситуации, когда естесственный удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 08:52 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
CrazierИ еще, разумно ли в данном случае делать id хешем? Совсем неразумно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:58 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
CrazierДелать id числовым (int) не совсем корректно по логике приложения. Судя по этой строке, Вы собираетесь взвались на id какие-то неправильные функции. Лучше бросить эту затею. CrazierСтроковым (varchar(128)) опасаюсь по производительности. На эту тему гугль выдаст миллионы ссылок подробных обсуждений. CrazierИ еще, разумно ли в данном случае делать id хешем? Смотря с какой точки зрения. Если планируется очень активная вставка в эту таблицу из кучи сессий, это может быть одним из решений проблемы "горячего блока", если такая проблема актуальна. А вообще - игры разума на пустом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:53 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
ну сделайте тогда это поле текстовым если у вас на то есть причины и не ставьте на него ключ ) а возьмите еше одно числовое поле в качестве id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 17:12 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Crazier пишет: > Делать id числовым (int) не совсем корректно по логике приложения. > Строковым (varchar(128)) опасаюсь по производительности. Но знаний > катастрофически не хватает. > Вопрос: на сколько оправданы мои опасения? (примерно, во сколько раз > будет медленнее) Оправданы. Но твой вопрос надо было бы переформулировать в следующем виде: "Насколько длинный идентификатор хуже короткого" ? То есть если что-то и будет хуже, то не потому, что первичный ключ строковый, а потому, что он длинный - в 16-32 раза длинней. А вот длинный первичный ключ - это плохо. И к тому же я не верю, что тебе для идентификации документа нужна именно такая вот длинная строка. > И еще, разумно ли в данном случае делать id хешем? Хэшем чего ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 20:27 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ пишет: > Скорее всего это зависит от SQL-сервера, а нормальному SQL-серверу по > барабану. Смущает только один момент, использование Ну неправда. Нифига не по барабану. Чем длинней ключ, тем меньше ключей влезает на страницу индекса, больше нужно хранить страниц в индексе, выше становится индекс и снижается его эффективность, поскольку надо делать больше чтений для позиционированию по индексу. Это, конечно же, не катастрофическое снижение производительности (отношение сложностей обоих вариантов - константа, т.е. задачи имеют одну и ту же сложность), но все же. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 20:31 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
MasterZivНу неправда. Нифига не по барабану. Чем длинней ключ, тем меньше ключей влезает на страницу индекса, больше нужно хранить страниц в индексе, По барабану, по барабану. Эти аргументы повторялись тысячи раз; когда начинаются расчеты с цифрами, все оказывается не так, как представляется теоретически на пальцах. В частности, от глубины индекса мало что зависит, поскольку его корневые блоки напрочь кэшируются, крайне редко модифицируются, а следовательно читаются без каких-либо задержек, почти с нулевыми тратами. Основной недостаток длинного ключа - выполнение "масштабных чтений" индекса, прежде всего index full scan, когда надо таки заметно больше прочитать с диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 20:34 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Кифирчик пишет: > ИМХО не совсем корректно делать ID строковым с точки зрения > проектирования БД... с точки зрения проектирования - как раз абсолютно корректно. > будет работать медленне примерно во "много" раз... Ну не во много раз будет разница, разница будет в отношении высот деревьев поиска. Это, допустим, 4 и 5. Или 4 и 6. Что-то в таком роде, но не во "много-много" раз. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 20:35 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Имелся ввиду хеш внутреннего названия и номера документа. Оставлю id числовым на данный момент. Когда появится база для импорта, попробую на тестовой машине сгенерировать строковые id и сравнить производительность. Результаты сообщу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 21:23 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
CrazierСпасибо за ответы. Имелся ввиду хеш внутреннего названия и номера документа. Оставлю id числовым на данный момент. Когда появится база для импорта, попробую на тестовой машине сгенерировать строковые id и сравнить производительность. Результаты сообщу. Это тема для форумов PostgreSQL или MySQL. В зависимости от СУБД, и даже в зависимости от настройки СУБД результаты могут отличаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 23:45 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
CrazierДелать id числовым (int) не совсем корректно по логике приложения. Строковым (varchar(128)) опасаюсь по производительности. Но знаний катастрофически не хватает. Вопрос: на сколько оправданы мои опасения? (примерно, во сколько раз будет медленнее) И еще, разумно ли в данном случае делать id хешем? . Если логике приложения есть дело до первичного ключа БД - надо что то менять. Либо в логике, либо в команде :-). Ставьте INT автоинкрементный в качестве первичного ключа- и забудте про него :-) Строковый - генерить надо как-то (надеюсь, Вы не планируете использовать естественный ключ? :-). Сдается мне- на этапе генерения и будут потери в производительности. Опасаетесь проблемм со слиянием данных из разных баз , а думать над процедурой слияния лень - ну, попробуйте UNIQUEIdentifier, на Ваших объемах разницы не заметите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 08:33 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Crazier пишет: > Спасибо за ответы. Имелся ввиду хеш внутреннего названия и номера документа. Хэш не может быть уникальным идентификатором по определению. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 14:03 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Еще учитывайте такой момент: строковый (и вообще любого типа естественный) ключ часто помогает уменьшить соединения таблиц в запросах. Грубо говоря (за суть примера не пинайте, он надуманный, просто для иллюстрации), вместо 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 хранится в полной форме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2008, 12:28 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Владимир П.Еще учитывайте такой момент: строковый (и вообще любого типа естественный) ключ часто помогает уменьшить соединения таблиц в запросах. Грубо говоря (за суть примера не пинайте, он надуманный, просто для иллюстрации), вместо 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 хранится в полной форме.Не соглашусь. Вы говорите не о выборе между строковыми/числовыми ключами, а о выносе части данных в отдельную сущность, что уже изменяет логику базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2008, 12:52 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
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 хранится в полной форме.Не соглашусь. Вы говорите не о выборе между строковыми/числовыми ключами, а о выносе части данных в отдельную сущность, что уже изменяет логику базы.Простите, наврал, прочитал ваш пост снизу вверх. Но все равно не соглашусь, т.к. вы предлагаете просто денормализацию базы, а не критерий выбора строкового или числового ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2008, 12:54 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
Владимир П. пишет: > Еще учитывайте такой момент: строковый (и вообще любого типа > естественный) Не строковый, а именно естественный. (точнее - не дополнительный суррогатный ключ в данной таблице). При этом ключ может быть вообще любого типа, в том числе и числового. Зачем вы здесь поднимаете эту тему, если это вообще никак не связано с обсуждаемым вопросом - абсолютно не понятно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2008, 13:22 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Зачем вы здесь поднимаете эту тему, если это вообще никак не связано с обсуждаемым вопросом - абсолютно не понятно. Автор темы пишет: " Делать id числовым (int) не совсем корректно по логике приложения ." Но опасается неудовлетворительной производительности. Предлагает заменить идентификацию строкой на идентификацию дополнительным (по сути суррогатным) числовым полем. Я показываю, что если сохранить тестовое представление (которое, очевидно, есть естественный атрибут в рамках его предметной области), можно в некоторых случаях не только не уменьшить, но и увлеичить производительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2008, 13:46 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Но твой вопрос надо было бы переформулировать в следующем виде: "Насколько длинный идентификатор хуже короткого" ? То есть если что-то и будет хуже, то не потому, что первичный ключ строковый, а потому, что он длинный - в 16-32 раза длинней. А вот длинный первичный ключ - это плохо. И к тому же я не верю, что тебе для идентификации документа нужна именно такая вот длинная строка. Все же может иметь значение не тока длинна, но и суррогатность ключа: значения такого ключа менять, скорее всего, предется реже. В случае использования ключа в ссылочной целостности это может иметь значение в общем случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 10:53 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
vadiminfo пишет: > Все же может иметь значение не тока длинна, но и суррогатность ключа: > значения такого ключа менять, скорее всего, предется реже. Значение первичного ключа вообще-то никогда не меняется, разве что в нештатных случаях. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2008, 22:08 |
|
||
|
На сколько числовой id быстрее строкового?
|
|||
|---|---|---|---|
|
#18+
MasterZivЗначение первичного ключа вообще-то никогда не меняется, Суррогатного первичного ключа - во-первых. Необходимость менять значение - таки один из врожденных недостатков естественных ключей. Во-вторых, штатные случаи тоже бывают, хотя и очень нечасто. Скажем, есть такой подход: если нужен независимый ввод справочников в куче мест, то вводимые записи украшаются отрицательными id и реплицируются в центр, где изменения сливаются и приобретают "правильный" номер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2008, 22:19 |
|
||
|
|

start [/forum/topic.php?fid=3&msg=40137741&tid=2186821]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
89ms |
get tp. blocked users: |
3ms |
| others: | 1141ms |
| total: | 1488ms |

| 0 / 0 |
