Nee dit is niet zo. GUIDs zijn nl niet sequentieel. Een PK heeft veelal een clustered index (een index die ervoor zorgt dat je values in de index volgorde fysiek zijn opgeslagen) en een insert is dan veelal een veel tragere operatie vaak.curry684 schreef op woensdag 27 juni 2007 @ 03:20:
Uhm een GUID is niets anders dan een 16 byte integer die net zo goed indexeerbaar is als een willekeurige identity of auto_increment int. De enige reden dat GUID's marginaal en verwaarloosbaar trager zijn dan ints is dat er 4 keer zoveel data rondgeschoven wordt door de indexen. Het voordeel daarentegen is dat GUID's iedere neiging om ooit corrupte logica aan een PK te verbinden nog sterker de grond inboort, denk hierbij aan idiote queries die ik op dit forum wel eens langs heb zien komen als "select top 1 * from table order by table_id desc" om het nieuwst toegevoegde item te vinden.
SqlServer 2005 heeft NEWSEQUENTIALID() dat een default constraint functie is waarmee je sequentiele GUIDs kunt maken, en dat lost het probleem op.
-----
Namen als PK values zijn niet handig. Het punt is nl. dat wanneer de user via een applicatie de PK value vult en een tikfout maakt, je het haasje bent want dan moet je een PK value wijzigen, wat theoretisch niet kan (een entity met een gewijzigde pk is een andere entity, immers de PK value identificeert de rest van de attribute waarden). Het is niet altijd zo dat een surrogate key moet worden gekozen maar voor namen en datums bv, zou ik er wel absoluut voor kiezen.
En GUIDs zou ik links laten liggen tenzij je meerdere processes data laat inserten waarbij je er zeker van moet zijn dat de PK values gecreeerd buiten de DB uniek zijn BINNEN de DB.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com