должны ли мы использовать float в качестве первичного ключа в sql-server
кто-то предложил мне использовать float в качестве первичного ключа таблицы вместо использования BIGINT. можем ли мы сделать первичный ключ float идентичностью ?
4 ответов
вопросы:
- вы можете сделать первичный ключ поля float.
- вы не можете сделать идентификатор поля float. Столбцы идентификаторов должны иметь тип данных int, bigint, smallint, tinyint или decimal или numeric с шкала 0
- вы абсолютно не должны использовать поле float в качестве PK. Опять же, вы можете, SQL Server позволит вам, но не рекомендуется в основном потому, что поплавки неточны, как сказал @Andy.
зачем нужен поплавок, как ПК в любом случае? Вам нужно значение типа 3,1234235234534 для уникальной идентификации строки?
обратите внимание, как, если вы делаете float a=1f и float b=1f, они одинаковы ?
однако, если(a==b), вероятно, не будет истинным, поскольку поплавки неточны.
Почему бы не использовать большой тип данных для первичных ключей:
держите "ширину" ваших индексов как можно более узкой. Это уменьшает размер индекса и уменьшает количество считываний диска, необходимых для чтения индекса, повышая производительность.
Если возможно, попробуйте создать индексы для столбцов с целочисленными значениями вместо символов. Целочисленные значения имеют меньше накладных расходов, чем символьные значения.
Не используйте FLOAT или реальные типы данных для первичных ключей, так как они добавьте ненужные накладные расходы и может повредить производительности.
индексы на узких столбцах предпочтительнее индексов на широких столбцах. Чем уже индекс, тем больше записей SQL Server может поместиться на странице данных, что в свою очередь уменьшает объем ввода-вывода, необходимый для доступа к данным.
уменьшите размер ключей, таким образом уменьшающ прочитанный I/O во время процесса соединения, и увеличивающ общую производительность.
вы не можете сделать float как личность.
и очень плохая идея использовать float в качестве первичного ключа. Вы должны пойти с bigint.