powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / можно ли делать binary(12) как Primary Key ?
21 сообщений из 21, страница 1 из 1
можно ли делать binary(12) как Primary Key ?
    #40054470
nmurzin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Существует программа, которая записывает в электронные чипы уникальные идентификаторы и прочую информацию.
Мне нужно сделать базу данных, которая хранит эти идентификаторы и прочую информацию.
Длина уникального идентификатора 12 байт.
Я сделал это поле типа binary(12).
Так как это поле должно быть уникальным, то я хочу сделать его Primary Key.
И во тут я задумался.
Хорошая ли это идея делать массив binary(12) как Primary Key ?
Означает ли это, что каждый раз при вставке новой записи, база будет бегать по всем записям, чтобы проверить уникальность?
Или у нее есть внутри какие-то хитрые механизмы и беспокоится не о чем?

Вообщем суть вопроса в том, можно ли делать binary(12) как Primary Key ?
Или так не принято.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054481
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nmurzin
Хорошая ли это идея делать массив binary(12) как Primary Key ?

Uniqueidentifier, который повсеместно и не задумываясь делают PK, имеет размер 16 байт - и ничего.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054494
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nmurzin
Здравствуйте.
Существует программа, которая записывает в электронные чипы уникальные идентификаторы и прочую информацию.
Мне нужно сделать базу данных, которая хранит эти идентификаторы и прочую информацию.
Длина уникального идентификатора 12 байт.
Я сделал это поле типа binary(12).
Так как это поле должно быть уникальным, то я хочу сделать его Primary Key.
И во тут я задумался.
Хорошая ли это идея делать массив binary(12) как Primary Key ?
Означает ли это, что каждый раз при вставке новой записи, база будет бегать по всем записям , чтобы проверить уникальность?
Или у нее есть внутри какие-то хитрые механизмы и беспокоится не о чем?

Вообщем суть вопроса в том, можно ли делать binary(12) как Primary Key ?
Или так не принято.


В одном можете быть спокойны: база никуда не побежит, она вообще никогда никуда не бегает. Так что - расслабьтесь, этот пункт вычеркиваем
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054533
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nmurzin,

что значит не принято? Ограничения на индексы документированы, если они не нарушаются, то можно использовать.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054551
nmurzin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Ткните меня носом, пожалуйста, где они документированы.
Или озвучьте, пожалуйста, на русском языке основные ограничения.

Я боюсь что когда ключ является массивом, проверка на уникальность будет проходить тупым перебором всех записей.
Или будет произведена так называемая индексация, которая очень сильно раздует размер базы.
А у меня бесплатная Xpress версия с ограничением 10ГБ на базу данных.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054565
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nmurzin
Владислав Колосов,
Ткните меня носом, пожалуйста, где они документированы.
В документации
Я боюсь что когда ключ является массивом, проверка на уникальность будет проходить тупым перебором всех записей.
Или будет произведена так называемая индексация, которая очень сильно раздует размер базы.У вас какие-то очень своеобразные представления об индексах и работе с ними.
Каким еще массивом? Где вы такой термин выискали? С каких пор последовательность 12-ти никак не интерпретируемых и не преобразовываемых байт стали каким-то массивом?
С каких пор кластерный индекс стал раздувать базу? Вы вообще что-нить про индексы в ms sql что-нить читали?А у меня бесплатная Xpress версия с ограничением 10ГБ на базу данных.Потрясающе! А мужики-то и не знают...
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054583
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nmurzin
Я боюсь что когда ключ является массивом, проверка на уникальность будет проходить тупым перебором всех записей.
Зачётно сказано :-)
Но в общем зерно истины тут есть, хоть это и непривычно читать в обсуждении MSSQL.
Не знаю, как это реализовано в ядре, но наверняка для типа binary() операции сравнения делаются циклами, по крайней мере, для некоторых длин binary.
Однако это незначительно повлияет на производительности, и точно из за этого не возникнет таинственная "так называемая индексация", и на размер базы это не повлияет, при прочих равных.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054650
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
емнип, интеловские процессоры могут как-то быстро сравнивать два участка памяти по указателям.
По крайней мере LSN это binary(10) и живёт, не кашляет.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054669
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
емнип, интеловские процессоры могут как-то быстро сравнивать два участка памяти по указателям.
Ага, команда CMPSB
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054936
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Не знаю, как это реализовано в ядре, но наверняка для типа binary() операции сравнения делаются циклами

Сюрприз, но они для любых типов делаются циклами. Точнее - одним вызовом memcmp().
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40054951
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а для целых чисел нет оптимизации сравнения в регистрах? Вы анализировали код или участвовали в разработке, откуда такая информация?
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055277
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В сравнении данных не участвуют "целые числа", только "ключ, полученный из данных записи каким-то способом". И этот ключ - просто кусок памяти неопределённого размера.

Базовые принципы функционирования программ едины.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055282
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
В сравнении данных не участвуют "целые числа", только "ключ, полученный из данных записи каким-то способом". И этот ключ - просто кусок памяти неопределённого размера.

Базовые принципы функционирования программ едины.

Не совсем.

Например, для строковых ключей, используются более сложные правила сравнения, чем просто равенство двух бинарей. И эти правила еще и настраиваются через collate.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055286
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

то есть Вы не знаете - имеется ли оптимизация для типов или нет.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055486
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
Например, для строковых ключей, используются более сложные правила сравнения, чем просто равенство двух бинарей. И эти правила еще и настраиваются через collate.

И, внезапно, эти правила влияют только на способ преобразования данных записи в вышеупомянутый "ключ" для последующего сравнения с помощью memcmp().

Владислав Колосов
то есть Вы не знаете - имеется ли оптимизация для типов или нет.

Я знаю, что она бессмысленна. Отсюда делаю вывод, что её нет.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055510
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы не рассуждать предметно, на основе исходников ?
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055553
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
А почему бы не рассуждать предметно, на основе исходников ?


Я однозначно говнокодер и в сишарпе лох, но если это тоже "под капотом" скуля, то я в шоке.
1. Сейчас скуль 64-хбитный (если мне ни чего не изменяет) . Единственная оптимизация - поставить префикс у IMUL что оба оператора 64 бита.
2. Есть IMUL - наборная инструкция ( тута посмотреть )
3. Ну да, кроссплатформенность рулит. Ну хорошо, пусть она рулит дальше. Надеюсь, что по указанной ссылке всё-таки c#-овая интерпретация C-ишного исходного кода.
4. Ну, я безусловно могу быть тотально неправ, ибо я "ненастоящий сварщик"

На скрине - кусок умножения (как я понял) двух бигинтов (как я понял):
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055600
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
msLex
Например, для строковых ключей, используются более сложные правила сравнения, чем просто равенство двух бинарей. И эти правила еще и настраиваются через collate.

И, внезапно, эти правила влияют только на способ преобразования данных записи в вышеупомянутый "ключ" для последующего сравнения с помощью memcmp().

Владислав Колосов
то есть Вы не знаете - имеется ли оптимизация для типов или нет.

Я знаю, что она бессмысленна. Отсюда делаю вывод, что её нет.


Не все логические рассуждения транзитивны, а потому истинны. Хороший пример тому - анекдот при Василия Ивановича и спички.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055738
Vladimir2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Думаю что не все так однозначно, в рамках архитектуры атомарные типы могут сравниваться одной командой / одним опкодом. Вот интересно, кстати, для типов с плавающей точкой используется ли сопроцессор или обычное бинарное сравнение?
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055824
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir2018,

жаль, что Дмитрий Пилюгин перестал здесь бывать, возможно, он бы ответил на этот вопрос.
...
Рейтинг: 0 / 0
можно ли делать binary(12) как Primary Key ?
    #40055871
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir2018
в рамках архитектуры атомарные типы могут сравниваться одной командой / одним опкодом.

Могут, но не это является узким местом. Проблема в том чтобы эти типы выделить и доставить туда, где они могут сравниться одним опкодом. Овчина выделки не стоит, memcmp() оптимизирован в компиляторах со страшной силой, по совокупности его не обогнать.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / можно ли делать binary(12) как Primary Key ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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