Sokan nem identity-s int-et hanem uniqueidentifiert használnak pk-ként olyan táblákban, amelyet több helyen módosítanak, pl. replikációs felállásban. Nagyon helyesen.
A gond csak az, hogy a NEWID()-val generált értékek tényleg nagyon véletlenszerű értékek (és a közhiedelemmel ellentétben nincs benne a MAC address, mint régen). Ha a generált értéket egy clustered indexes (leggyakrabban primary key-es) oszlopban használjuk, akkor ez egymás után következő beszúrások véletlenszerű helyre kerülnek az adatbázis fájlban (ez így pongyola, de nem akarom túlrészletezni), és széttöredezik a tábla ezer darabra, ráadásul a lapok nem lesznek jól kitöltve, és mégis sok page split lesz. Szóval gáz lesz az insert teljesítménye. Ezen segíthet a NEWSEQUENTIALID függvény, ennek teljesítményét és fragmentálási hatását vizsgálja ez a cikk.
Akinek ilyen jellegű az adatbázisa feltétlen olvassa el a cikket. Százszoros fragmentáció esetén csak megéri elgondolkodni, nem?
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.