Ik heb een databank waarop in eerste instantie heel wat inserts zullen gebeuren.
(De databank wordt opgevuld dmv informatie die uit 'flat files' komt. De eerste load zal ervoor zorgen dat er in bepaalde tabellen 100.000den rows komen te zitten.
Nu heb ik het (fysische) design van de databank eens zitten bekijken, en ik heb gemerkt dat er heel wat tabellen zijn die geen clustered index hebben.
De primary keys zijn GUID's, dus die zijn alleszins geen goede keuze om daar een clustered index op te leggen, aangezien GUID's random zijn; bij een INSERT zou dit dus nogal wat page-splits kunnen veroorzaken.
Nu heb ik zitten denken om een clustered index op het veld 'LastUpdated' (DateTime) te leggen: bij een eerste insert zal de nde row een hogere waarde hebben voor 'LastUpdated' dan de n-1de row, enz.... IMHO zou dat dus geen vertragende factor mogen zijn bij de eerste load, aangezien de fysieke volgorde dan gewoon dezelfde zal zijn als de volgorde waarop de rows geinsert worden.
Nog een bijkomend voordeel van een clustered index op dat veld, is dat er bij de ingebruikname van de applicatie geregeld selects zullen gedaan worden op een datumrange (Op dat lastupdated veld dus).
Een nadeel is natuurlijk als iemand een record wijzigt, het LastUpdated veld ook gewijzigd wordt, en SQL Server zal dan de fysieke opslagvolgorde moeten gaan aanpassen. Ik vraag me af wat dit zal geven bij een 'Save' operatie op 1 of meerdere records, als de tabel 100.000 records bevat. Zal het bepalen van de nieuwe opslagvolgorde significant merkbaar zijn, of zal dat nog wel meevallen aangezien de 'LastUpdated' datum gewoon groter zal zijn dan het laatste geupdate record, en zal het record gewoon achteraan opnieuw toegevoegd worden?
(De databank wordt opgevuld dmv informatie die uit 'flat files' komt. De eerste load zal ervoor zorgen dat er in bepaalde tabellen 100.000den rows komen te zitten.
Nu heb ik het (fysische) design van de databank eens zitten bekijken, en ik heb gemerkt dat er heel wat tabellen zijn die geen clustered index hebben.
De primary keys zijn GUID's, dus die zijn alleszins geen goede keuze om daar een clustered index op te leggen, aangezien GUID's random zijn; bij een INSERT zou dit dus nogal wat page-splits kunnen veroorzaken.
Nu heb ik zitten denken om een clustered index op het veld 'LastUpdated' (DateTime) te leggen: bij een eerste insert zal de nde row een hogere waarde hebben voor 'LastUpdated' dan de n-1de row, enz.... IMHO zou dat dus geen vertragende factor mogen zijn bij de eerste load, aangezien de fysieke volgorde dan gewoon dezelfde zal zijn als de volgorde waarop de rows geinsert worden.
Nog een bijkomend voordeel van een clustered index op dat veld, is dat er bij de ingebruikname van de applicatie geregeld selects zullen gedaan worden op een datumrange (Op dat lastupdated veld dus).
Een nadeel is natuurlijk als iemand een record wijzigt, het LastUpdated veld ook gewijzigd wordt, en SQL Server zal dan de fysieke opslagvolgorde moeten gaan aanpassen. Ik vraag me af wat dit zal geven bij een 'Save' operatie op 1 of meerdere records, als de tabel 100.000 records bevat. Zal het bepalen van de nieuwe opslagvolgorde significant merkbaar zijn, of zal dat nog wel meevallen aangezien de 'LastUpdated' datum gewoon groter zal zijn dan het laatste geupdate record, en zal het record gewoon achteraan opnieuw toegevoegd worden?
https://fgheysels.github.io/