Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server BIGINT или DECIMAL(18,0) за първичен ключ

Получавате този диапазон с bigint:

-2^63 to 2^63-1 

also known as roughly:

-9.2 x 10^18 to 9.2 x 10^18

Получавате този диапазон с decimal(18,0) :

-10^18 to 10^18

Decimal:Байтове за съхранение на точност

Precision    Storage Bytes
1-9:         5
10-19:       9
20-28:       13
29-38:       17

Цели числа и байтове за съхранение

integer type    Storage Bytes
bigint          8
int             4
smallint        2
tinyint         1

Мисли

Двата примера, публикувани във вашия въпрос, всъщност дават почти същото количество уникални стойности.

Освен това няма да видите значителна промяна в производителността, независимо от вашия избор, но ще видите промяна в ефективността за другите програмисти в екипа, ако започнете да използвате десетични знаци, когато програмистите очакват цяло число. Това е второстепенна точка.

За да разрешите конкретния си проблем, ако искате по-голям диапазон, използвайте Decimal(38,0). Това ви дава:

-10^38 to 10^38

Ако се притеснявате за скоростта, използвайте минималната прецизност, която ще продължи целия живот на вашия софтуер.

Ако не измервате времето в наносекунди, тогава изберете опцията, която ще пасне най-добре на начина на мислене на вашите програмисти и желанието ви да имате много дълъг набор от числа.

Референции



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. scope_identity срещу ident_current

  2. Как да накарате SQL Profiler да наблюдава изпълнението на тригера

  3. Период от време, попадащ между две дати в LINQ заявка

  4. Как да изберете подмножество от колони от набора от резултати на съхранена процедура (T-SQL)

  5. Как да изпращате имейли от SQL Server (T-SQL)