|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Здравствуйте. Существует программа, которая записывает в электронные чипы уникальные идентификаторы и прочую информацию. Мне нужно сделать базу данных, которая хранит эти идентификаторы и прочую информацию. Длина уникального идентификатора 12 байт. Я сделал это поле типа binary(12). Так как это поле должно быть уникальным, то я хочу сделать его Primary Key. И во тут я задумался. Хорошая ли это идея делать массив binary(12) как Primary Key ? Означает ли это, что каждый раз при вставке новой записи, база будет бегать по всем записям, чтобы проверить уникальность? Или у нее есть внутри какие-то хитрые механизмы и беспокоится не о чем? Вообщем суть вопроса в том, можно ли делать binary(12) как Primary Key ? Или так не принято. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 10:58 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
nmurzin Хорошая ли это идея делать массив binary(12) как Primary Key ? Uniqueidentifier, который повсеместно и не задумываясь делают PK, имеет размер 16 байт - и ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 11:21 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
nmurzin Здравствуйте. Существует программа, которая записывает в электронные чипы уникальные идентификаторы и прочую информацию. Мне нужно сделать базу данных, которая хранит эти идентификаторы и прочую информацию. Длина уникального идентификатора 12 байт. Я сделал это поле типа binary(12). Так как это поле должно быть уникальным, то я хочу сделать его Primary Key. И во тут я задумался. Хорошая ли это идея делать массив binary(12) как Primary Key ? Означает ли это, что каждый раз при вставке новой записи, база будет бегать по всем записям , чтобы проверить уникальность? Или у нее есть внутри какие-то хитрые механизмы и беспокоится не о чем? Вообщем суть вопроса в том, можно ли делать binary(12) как Primary Key ? Или так не принято. В одном можете быть спокойны: база никуда не побежит, она вообще никогда никуда не бегает. Так что - расслабьтесь, этот пункт вычеркиваем ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 11:39 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
nmurzin, что значит не принято? Ограничения на индексы документированы, если они не нарушаются, то можно использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 12:47 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Владислав Колосов, Ткните меня носом, пожалуйста, где они документированы. Или озвучьте, пожалуйста, на русском языке основные ограничения. Я боюсь что когда ключ является массивом, проверка на уникальность будет проходить тупым перебором всех записей. Или будет произведена так называемая индексация, которая очень сильно раздует размер базы. А у меня бесплатная Xpress версия с ограничением 10ГБ на базу данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 13:29 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
nmurzin Владислав Колосов, Ткните меня носом, пожалуйста, где они документированы. Я боюсь что когда ключ является массивом, проверка на уникальность будет проходить тупым перебором всех записей. Или будет произведена так называемая индексация, которая очень сильно раздует размер базы.У вас какие-то очень своеобразные представления об индексах и работе с ними. Каким еще массивом? Где вы такой термин выискали? С каких пор последовательность 12-ти никак не интерпретируемых и не преобразовываемых байт стали каким-то массивом? С каких пор кластерный индекс стал раздувать базу? Вы вообще что-нить про индексы в ms sql что-нить читали?А у меня бесплатная Xpress версия с ограничением 10ГБ на базу данных.Потрясающе! А мужики-то и не знают... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 13:55 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
nmurzin Я боюсь что когда ключ является массивом, проверка на уникальность будет проходить тупым перебором всех записей. Но в общем зерно истины тут есть, хоть это и непривычно читать в обсуждении MSSQL. Не знаю, как это реализовано в ядре, но наверняка для типа binary() операции сравнения делаются циклами, по крайней мере, для некоторых длин binary. Однако это незначительно повлияет на производительности, и точно из за этого не возникнет таинственная "так называемая индексация", и на размер базы это не повлияет, при прочих равных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 14:44 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
емнип, интеловские процессоры могут как-то быстро сравнивать два участка памяти по указателям. По крайней мере LSN это binary(10) и живёт, не кашляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 16:37 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Владислав Колосов емнип, интеловские процессоры могут как-то быстро сравнивать два участка памяти по указателям. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 17:11 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
alexeyvg Не знаю, как это реализовано в ядре, но наверняка для типа binary() операции сравнения делаются циклами Сюрприз, но они для любых типов делаются циклами. Точнее - одним вызовом memcmp(). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 14:36 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а для целых чисел нет оптимизации сравнения в регистрах? Вы анализировали код или участвовали в разработке, откуда такая информация? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 14:54 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
В сравнении данных не участвуют "целые числа", только "ключ, полученный из данных записи каким-то способом". И этот ключ - просто кусок памяти неопределённого размера. Базовые принципы функционирования программ едины. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 15:02 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В сравнении данных не участвуют "целые числа", только "ключ, полученный из данных записи каким-то способом". И этот ключ - просто кусок памяти неопределённого размера. Базовые принципы функционирования программ едины. Не совсем. Например, для строковых ключей, используются более сложные правила сравнения, чем просто равенство двух бинарей. И эти правила еще и настраиваются через collate. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 15:15 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, то есть Вы не знаете - имеется ли оптимизация для типов или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 15:27 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
msLex Например, для строковых ключей, используются более сложные правила сравнения, чем просто равенство двух бинарей. И эти правила еще и настраиваются через collate. И, внезапно, эти правила влияют только на способ преобразования данных записи в вышеупомянутый "ключ" для последующего сравнения с помощью memcmp(). Владислав Колосов то есть Вы не знаете - имеется ли оптимизация для типов или нет. Я знаю, что она бессмысленна. Отсюда делаю вывод, что её нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 14:40 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
А почему бы не рассуждать предметно, на основе исходников ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 17:26 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
.Евгений А почему бы не рассуждать предметно, на основе исходников ? Я однозначно говнокодер и в сишарпе лох, но если это тоже "под капотом" скуля, то я в шоке. 1. Сейчас скуль 64-хбитный (если мне ни чего не изменяет) . Единственная оптимизация - поставить префикс у IMUL что оба оператора 64 бита. 2. Есть IMUL - наборная инструкция ( тута посмотреть ) 3. Ну да, кроссплатформенность рулит. Ну хорошо, пусть она рулит дальше. Надеюсь, что по указанной ссылке всё-таки c#-овая интерпретация C-ишного исходного кода. 4. Ну, я безусловно могу быть тотально неправ, ибо я "ненастоящий сварщик" На скрине - кусок умножения (как я понял) двух бигинтов (как я понял): ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 21:37 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov msLex Например, для строковых ключей, используются более сложные правила сравнения, чем просто равенство двух бинарей. И эти правила еще и настраиваются через collate. И, внезапно, эти правила влияют только на способ преобразования данных записи в вышеупомянутый "ключ" для последующего сравнения с помощью memcmp(). Владислав Колосов то есть Вы не знаете - имеется ли оптимизация для типов или нет. Я знаю, что она бессмысленна. Отсюда делаю вывод, что её нет. Не все логические рассуждения транзитивны, а потому истинны. Хороший пример тому - анекдот при Василия Ивановича и спички. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 12:51 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Думаю что не все так однозначно, в рамках архитектуры атомарные типы могут сравниваться одной командой / одним опкодом. Вот интересно, кстати, для типов с плавающей точкой используется ли сопроцессор или обычное бинарное сравнение? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 09:21 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Vladimir2018, жаль, что Дмитрий Пилюгин перестал здесь бывать, возможно, он бы ответил на этот вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:44 |
|
можно ли делать binary(12) как Primary Key ?
|
|||
---|---|---|---|
#18+
Vladimir2018 в рамках архитектуры атомарные типы могут сравниваться одной командой / одним опкодом. Могут, но не это является узким местом. Проблема в том чтобы эти типы выделить и доставить туда, где они могут сравниться одним опкодом. Овчина выделки не стоит, memcmp() оптимизирован в компиляторах со страшной силой, по совокупности его не обогнать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 14:34 |
|
|
start [/forum/topic.php?fid=46&msg=40054470&tid=1684922]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 156ms |
0 / 0 |