sql >> Database >  >> RDS >> Sqlserver

Indexeringsprestaties BigInt vs VarChar

Je moet DEFINITIEF introduceer een surrogaat INT IDENTITY() primaire sleutel!!INT geeft je al potentieel tot 2 miljard rijen - is dat niet genoeg??

Deze primaire sleutel / geclusterde sleutel op SQL Server zal maximaal 64 bytes groot zijn (in plaats van 4, voor een INT) - waardoor uw geclusterde index EN al uw niet-geclusterde index onherkenbaar opgeblazen wordt. De hele clustersleutel (al je 8 kolommen) zal worden opgenomen op elke afzonderlijke pagina van elke afzonderlijke niet-geclusterde index op die tabel - zeker veel en veel ruimte verspillend.

Dus op een gegeven indextabel zou je tot 16 keer meer items hebben met een surrogaat INT geclusterde sleutel - dat betekent veel minder I/O, veel minder tijd verspild aan het lezen van indexpagina's.

En stel je eens voor dat je probeert een refererende-sleutelrelatie met die tabel tot stand te brengen.... elke onderliggende tabel zou alle 8 kolommen moeten hebben van uw primaire sleutel als externe sleutelkolommen, en specificeer alle 8 kolommen in elke join - wat een nachtmerrie!!

Bij 78 miljoen rijen, zal zelfs het veranderen van de clustersleutel naar INT IDENTITY u tot 60 bytes per rij besparen - dat alleen al zou uitkomen op maximaal 4 GByte schijfruimte (en RAM-gebruik op uw server). En dat is nog niet eens begonnen met het berekenen van de besparingen op de niet-geclusterde indices.......

En natuurlijk, ja, ik zou ook de VARCHAR (10) veranderen in INT of BIGINT - als het een getal is, maak het veldtype dan numeriek - het heeft geen zin om het op VARCHAR (10) te laten, eigenlijk. Maar dat alleen zal geen enorm verschil maken in termen van snelheid of prestaties - het maakt het werken met de gegevens alleen maar veel gemakkelijker (hoeft niet altijd naar numerieke typen te gaan bij het vergelijken van waarden, enzovoort).

Marc



  1. Openbare synoniemen versus schema.object-patroon

  2. hoe worden smileys gecodeerd in de mysql utf-8 mb4-database?

  3. SQL hoe groeperen op fiscaal kwartaal en jaar met een datumveld

  4. Voeg meerdere rijen in met dezelfde unieke ID