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

numeric(38,0) jako kolumna klucza głównego; dobry, zły, kogo to obchodzi?

Cóż, jesteś wydawanie większej ilości danych na przechowywanie numerów, do których tak naprawdę nigdy nie dotrzesz.

bigint wzrasta do 9 223 372 036 854 775 807 w 8 bajtach

int wzrasta do 2.147.483.647 w 4 bajtach

LICZBA(38,0) zajmie, jeśli dobrze robię matematykę, 17 bajtów.

Nie jest to duża różnica, ale:mniejsze typy danych =więcej wierszy w pamięci (lub mniej stron dla tej samej liczby wierszy) =mniej dyskowych operacji we/wy w celu wyszukiwania (indeksowane lub wyszukiwanie stron danych). To samo dotyczy replikacji, stron dziennika itp.

W przypadku SQL Server:INT jest standardem IEEE, a więc jest łatwiejszy do porównania dla procesora, więc uzyskujesz niewielki wzrost wydajności, używając INT vs. NUMERIC (który jest upakowanym formatem dziesiętnym). (Uwaga w Oracle, jeśli bieżąca wersja pasuje do starszych wersji, na których dorastałem, WSZYSTKIE typy danych są pakowane, więc INT w środku jest prawie tym samym, co NUMERIC(x,0), więc nie ma różnicy w wydajności)

Tak więc, w ogólnym schemacie rzeczy -- jeśli masz dużo dysku, pamięci RAM i zapasowego I/O, użyj dowolnego typu danych. Jeśli chcesz uzyskać nieco większą wydajność, bądź bardziej konserwatywny.

W przeciwnym razie w tym momencie zostawiłbym to tak, jak jest. Nie trzeba nic zmieniać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź rekordy z 3 lub więcej kolejnymi rekordami o tej samej wartości

  2. Najlepszy sposób na przechowywanie czasu (gg:mm) w bazie danych

  3. Jak korzystać z właściwości IDENTITY() w SQL Server

  4. Serwer SQL 2008 wymuszający datę z dd/MM/rrrr na MM/dd/rrrr

  5. Wyzwalacz SQL Server AFTER INSERT nie widzi właśnie wstawionego wiersza