powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / использование unique для varchar
10 сообщений из 10, страница 1 из 1
использование unique для varchar
    #38339503
MargaritaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
У меня тут вопрос на общие познания в mysql.
Есть таблица
id(int)
link(varchar(200))
name(varchar) допустим.

Мне надо, чтобы все ссылки были уникальными, ну, и первое, что пришло мне в голову - сделать поле link unique.
На это начальник сказал, нельзя так делать, это varchar , при больших объемах данных плохо будет (честно искала в интернете, нигде не нашла, что плохо пользовать unique для varchar ), предложил завести еще один столбец, записывать туда хешированый линк и его делать уникальным...

собственно вопрос: что оптимальнее и быстрее? unique для varchar или unique для его хеша? или разницы нет?
...
Рейтинг: 0 / 0
использование unique для varchar
    #38339517
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае такого запрета, конечно, нет.
Насколько оптимально использовать тот или другой вариант зависит от ваших локальных особенностей - количества записей, средней длины фактических данных в этом поле, выполняемых операций/запросов, требований по длительности выполнения запросов и т.п.
Ваш вариант, скорее всего, потребует больше места для хранения, нежели вариант начальника. Но насколько это критично - решать вам.
...
Рейтинг: 0 / 0
использование unique для varchar
    #38339523
MargaritaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо)
...
Рейтинг: 0 / 0
использование unique для varchar
    #38339553
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MargaritaM, кстати, уникальность хэша не гарантирует уникальность хэшируемого значения. Она лишь позволяет с довольно высокой вероятностью предположить , что если хэши отличаются, то и их прообразы тоже отличаются.
...
Рейтинг: 0 / 0
использование unique для varchar
    #38339575
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirMargaritaM, кстати, уникальность хэша не гарантирует уникальность хэшируемого значения.Как раз гарантирует. А вот обратное не верно - уникальность исходных данных не гарантирует уникальности хэша.tanglirОна лишь позволяет с довольно высокой вероятностью предположить , что если хэши отличаются, то и их прообразы тоже отличаются.Да, при вычислении хэша по накопленным данным могут случиться коллизии, т.е. случаи, когда исходные строки разные, а хэши одинаковые. Также придется решить что делать в случае, если такие коллизии встретятся в будущем.
...
Рейтинг: 0 / 0
использование unique для varchar
    #38339866
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... да. это и имел в виду, а как начал писать, куда-то не в ту степь ушёл :)
...
Рейтинг: 0 / 0
использование unique для varchar
    #38340775
MargaritaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft уникальность исходных данных не гарантирует уникальности хэша
да, я знаю. В связи с этим, если в таблице будет очень много строк, можно ли применять CRC32? или все же надежнее будет мд5?

miksoft Ваш вариант, скорее всего, потребует больше места для хранения, нежели вариант начальника.
объясните пожалуйста почему? в моем понимании, если ко всем столбцам, которые у меня имеются добавить еще один "хеш" и сделать уникальным его ,а не строку, для которой он сделан... ну,это же займет больше места, чем без этого столбца и с уникальной строкой... данных храниться больше=>места занимает больше?.. ну, или, что очень вероятно, я чего-то не понимаю) другой вопрос, может просто запросы быстрее работать будут?

miksoft зависит от ваших локальных особенностей - количества записей, средней длины фактических данных в этом поле, выполняемых операций/запросов, требований по длительности выполнения запросов и т.п

записей много, предполагается больше 1 000 000, длина - ну средняя длина обычно ссылки), очень важна скорость выполнения, собственно поэтому и появилась идея с хешем , из-за опасения, что уникальность по текстовому полю, может замедлить работу.
...
Рейтинг: 0 / 0
использование unique для varchar
    #38340826
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MargaritaMmiksoft уникальность исходных данных не гарантирует уникальности хэша
да, я знаю. В связи с этим, если в таблице будет очень много строк, можно ли применять CRC32? или все же надежнее будет мд5?У MD5 будет значительно меньше коллизий, конечно.
CRC32 дает 32 бита на выходе, а MD5 - 128 бит.
На миллионе записей в CRC32 почти наверняка будет хотя бы коллизия, тогда как у MD5 еще остается запас в 96 двоичных порядков.
...
Рейтинг: 0 / 0
использование unique для varchar
    #38341299
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MargaritaM,

Быстрее будет unique для хэша, но очень ненамного. Но unique для хэша делать принципиально неправильно, потому как для РАЗНЫХ исходных строк может давать ОДИНАКОВЫЕ значения, потому ваш constraint работать будет не так, как constraint по исходному полю.

Так что вывод — гнаться за мифической скоростью тут нельзя.
...
Рейтинг: 0 / 0
использование unique для varchar
    #38341418
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MargaritaMmiksoft уникальность исходных данных не гарантирует уникальности хэша
да, я знаю. В связи с этим, если в таблице будет очень много строк, можно ли применять CRC32? или все же надежнее будет мд5?

miksoft Ваш вариант, скорее всего, потребует больше места для хранения, нежели вариант начальника.
объясните пожалуйста почему? в моем понимании, если ко всем столбцам, которые у меня имеются добавить еще один "хеш" и сделать уникальным его ,а не строку, для которой он сделан... ну,это же займет больше места, чем без этого столбца и с уникальной строкой... данных храниться больше=>места занимает больше?.. ну, или, что очень вероятно, я чего-то не понимаю) другой вопрос, может просто запросы быстрее работать будут?

miksoft зависит от ваших локальных особенностей - количества записей, средней длины фактических данных в этом поле, выполняемых операций/запросов, требований по длительности выполнения запросов и т.п

записей много, предполагается больше 1 000 000, длина - ну средняя длина обычно ссылки), очень важна скорость выполнения, собственно поэтому и появилась идея с хешем , из-за опасения, что уникальность по текстовому полю, может замедлить работу.


Ты все понимаешь правильно, просто мы естественно эффект замедления работы от увеличения длины записи, связанной с там, что добавляется ещё одно поле, в расчет не принимали. Потому что это сложно очень оценить.

В общем тут так: поиск про новому индексу на хэш будет быстрее, за счет того, что хэш меньше строки (хотя ещё вопрос, на сколько) , но за счет того, что записи станет длиннее, чтение ее потенциально дольше и будет замедление.

Какой в итоге будет суммарный эффект очень сложно сказать.

С учетом того, что почти наверняка тебе надо будет ещё и по самой ссылке искать и индекс по ней делать, то предлагаю тебе забывать вообще о хэшах.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / использование unique для varchar
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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