Ma egy igazán érdekes problémába botlottam. Fejlesztőkkel beszélgettünk, hogy az IDENTITY oszlop esetén milyen adattípus legyen. Egyikük problémája az volt, hogy hamar kifutunk az int típusból, bár ezt én (sem) nem tartottam valószínűnek, ismervén az adatmennyiséget, évekig nem lenne ez gond. Éppen azért, hogy megkönnyítsem mások dolgát is, lássuk, hogy a különböző adattípusok esetén mennyi sort és mennyi helyet foglalhatunk el.
int
Az int típus -2^31 (-2147483648) és 2^31-1 (2147483647) vehet fel értékeket. Ez 4294967296 (4,29 milliárd!!!) lehetséges értéket jelent. Heylfoglalást tekintve, 4 byte egy elem, azaz minden lehetséges érték esetén ez 17179869184 byte --> 16GB helyet foglal el. Ehhez is már kell egy komoly teljesítmény :)
tinyint
Ez a típus 0 és 255 között vehet fel értékeket és 1 byte helyet foglal egy elem. Könnyen kiszámolható, hogy itt 256 byte a maximális helyfoglalás, ha minden lehetséges értéket le akarok tárolni.
smallint
Ez a típus is kevesebb helyet foglal és kevesebb értéket vehet fel, mint az int: -2^15 (-32768) és 2^15-1 (32767) értékeket veheti fel, ez összesen 65536 darabot jelent. Ennek a helyfoglalása 2 byte elemenként, azaz az összes felvehető értékre nézve 131072 byte --> 128KB
bigint
Ez az adattípus szerintem a tudomány jelenlegi állása szerint mindenkinek elég kellene, hogy legyen :). Elemenként 8 byte helyet foglal, -2^63 (-9223372036854775808) és 2^63-1 (9223372036854775807) között vehet fel értékeket. Az összes lehetséges érték 18446744073709551616 azaz 18,4 trillió lehetséges értéke lehet!!! Ez a milliárd (ezer millió) milliárdszorosa :) Szóval nagyon sok :)))
Mennyi helyet foglal vajon 18,4 trillió bigint érték? 147573952589676412928 byte, azaz 134217728 terrabyte --> 131072 petabyte --> 128 exabyte. Az SQL Server jelenlegi legutolsó verziója (SQL 2014) maximum 524272 terabyte méretű adatbázist képes kiszolgálni a
http://msdn.microsoft.com/en-us/library/ms143432.aspx#Engine oldalon található leírás alapján. Ez azt jelenti, hogy ez a bigint összes értéke 256 maximális méretű adatbázisban férne csak el!
Alapvetően, amikor adattípust választok, akkor a legkisebbet választom, ami teljesíti a követelményeimet. Azt hiszem egy darabig az int típus is elég lesz, de legalábbis 4 milliárd sorig biztosan :)