sql >> Database >  >> RDS >> Sqlserver

Is er een ernstige prestatiehit voor het gebruik van buitenlandse sleutels in SQL Server?

Er is een kleine prestatiehit op invoegingen, updates en verwijderingen omdat de FK moet worden gecontroleerd. Voor een individueel record zou dit normaal gesproken zo gering zijn dat het onmerkbaar is, tenzij je een belachelijk aantal FK's aan de tafel begint te krijgen (het duurt duidelijk langer om 100 andere tafels te controleren dan 2). Dit is een goede zaak en geen slechte zaak, aangezien databases zonder integriteit onbetrouwbaar en dus nutteloos zijn. U moet integriteit niet inruilen voor snelheid. Die prestatiehit wordt meestal gecompenseerd door het betere vermogen om uitvoeringsplannen te optimaliseren.

We hebben een middelgrote database met ongeveer 9 miljoen records en FK's overal waar ze zouden moeten zijn en merken zelden een prestatiehit (behalve op een slecht ontworpen tabel met meer dan 100 externe sleutels, het is een beetje traag om records hiervan te verwijderen, omdat alle moet worden gecontroleerd). Bijna elke dba die ik ken die zich bezighoudt met grote databases van terabyte en een echte behoefte aan hoge prestaties op grote datasets, dringt aan op externe sleutelbeperkingen, omdat integriteit de sleutel is tot elke database. Als de mensen met terabyte-databases de zeer kleine prestatiehit kunnen betalen, dan kunt u dat ook.

FK's worden niet automatisch geïndexeerd en als ze niet worden geïndexeerd, kan dit prestatieproblemen veroorzaken.

Eerlijk gezegd zou ik een kopie van uw database nemen, correct geïndexeerde FK's toevoegen en het tijdsverschil tonen om die tabellen in te voegen, te verwijderen, bij te werken en te selecteren in vergelijking met dezelfde uit uw database zonder de FK's. Laat zien dat je geen prestatiehit gaat veroorzaken. Toon vervolgens de resultaten van zoekopdrachten die verweesde records tonen die geen betekenis meer hebben omdat de PK waaraan ze gerelateerd zijn niet meer bestaat. Het is vooral effectief om dit te laten zien voor tabellen die financiële informatie bevatten ("We hebben 2700 bestellingen die we niet aan een klant kunnen koppelen" zal het management wakker maken en het opmerken).



  1. Hoe de MID()-functie werkt in MySQL

  2. SQLException:geen geschikt stuurprogramma gevonden

  3. gegevens opslaan in een database met behulp van tekst bewerken en knop

  4. Wat is het verschil tussen een Oracle- en Microsoft-schema?