Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server BIGINT lub DECIMAL (18,0) dla klucza podstawowego

Otrzymujesz ten zakres z bigint:

-2^63 to 2^63-1 

also known as roughly:

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

Otrzymujesz ten zakres z liczbą dziesiętną (18,0) :

-10^18 to 10^18

Dziesiętny:bajty pamięci na precyzję

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

Typy liczb całkowitych i bajty pamięci

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

Myśli

Dwa przykłady zamieszczone w Twoim pytaniu w rzeczywistości dają praktycznie taką samą liczbę unikalnych wartości.

Ponadto nie zauważysz znaczącej zmiany wydajności bez względu na Twój wybór, ale zauważysz zmianę wydajności innych programistów w zespole, jeśli zaczniesz używać ułamków dziesiętnych tam, gdzie programiści oczekują liczby całkowitej. To drobny punkt.

Aby rozwiązać konkretny problem, jeśli chcesz mieć większy zakres, użyj Decimal (38,0). To daje:

-10^38 to 10^38

Jeśli martwisz się o szybkość, użyj minimalnej precyzji, która wystarczy na cały okres użytkowania oprogramowania.

Jeśli nie mierzysz czasu w nanosekundach, wybierz opcję, która najlepiej pasuje do sposobu myślenia programistów i chęci posiadania bardzo długiego zestawu liczb.

Referencje



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dziennik transakcji dla bazy danych 'databasename' jest pełny.

  2. Jaki jest powód użycia kontekstu Transakcji przez inną sesję?

  3. Aktualizacja T-SQL z SUM i Group BY

  4. Czy istnieje odpowiednik .NET do newsekwencjonowania () SQL Server'a

  5. Konwertuj numer miesiąca na funkcję nazwy miesiąca w SQL