Blog (13)
Komentarze (1.3k)
Recenzje (0)
@StawikPiastPorównanie wydajności porównywania ID różnych typów danych.

Porównanie wydajności porównywania ID różnych typów danych.

17.10.2013 19:35

Od dłuższego już czasu męczyło mnie o ile wydajniejsze jest wykonywanie operacji join w zależności od typu danych jaki jest do tworzenia ID w kolumnie. Ostatnio widziałem także podobne pytanie na forum i postanowiłem się wreszcie temu przyjrzeć.

Testy wykonam na SQL Server 2012 Express. Porównam trzy typy danych:

  • Integer - typ liczb całkowitych, zalecany przez Microsoft, jego wielkość to 4 bajty (32 bity)
  • Nvarchar - typ ciągu znaków, jego wielkość jest zależna od ilości znaków.
  • Uniqueidentifier - typ przechowujący unikalne identyfikatory niepowtarzalne w skali globu, jego wielkość to 16 bajtów (128 bitów)

Porównuję te typy, ponieważ spotykam się z nimi w życiu i chciałem wiedzieć jaka jest rzeczywista różnica.

Do porównania wykorzystałem tabele o wielkości 1 000 000 wierszy, aby serwer miał co robić. Na tabelach są założone indeksy aby test wykonać w warunkach zbliżonych do rzeczywistych zastosowań.

Jeśli ktoś chce przeprowadzić testy u siebie to poniżej jest do pobrania skrypt.

Skrypt

No i sam wynik.

Porównanie wydajności porównywania różnych typów danych.
Porównanie wydajności porównywania różnych typów danych.

Wnioski

Jak widać najwydajniejszy okazał się być Integer, zgodnie z zaleceniami Microsoftu. Jeśli jednak z jakiegoś powodu chcemy aby każde ID było unikalne w skali nie tylko bazy ale także wielu baz to najlepiej jest stosować Uniqueidentifier, który jest nieco wolniejszy od Integera, ale znacznie szybszy od Nvarchar-a przechowującego Uniqueidentifier.

Więcej rozpisywać się nie będę bo nie ma o czym. Mam nadzieję że uzyskane informacje okażą się dla was przydatne i będziecie dobierać właściwe typy danych projektując jakąś bazę danych.

Wybrane dla Ciebie
Komentarze (2)