Considera un indice B-tree su un valore che aumenterà sempre monotonicamente, ad esempio una colonna di tipo IDENTITÀ. Con un'implementazione B-tree convenzionale, ogni volta che un nodo è pieno, sarà diviso il 50% / 50% e finiremo con un B-tree in cui (quasi) tutti i nodi saranno pieni solo del 50%.
So che Oracle scopre quando un valore è in costante aumento e in questi casi Oracle esegue invece una divisione del 90% / 10%. In questo modo, (quasi) tutti i nodi saranno pieni al 90% e si otterrà un utilizzo della pagina molto migliore per questi casi abbastanza comuni.
Non sono stato in grado di trovare la documentazione per una funzionalità simile in SQL Server. Tuttavia, ho eseguito due esperimenti in cui ho inserito rispettivamente N numeri interi casuali e N numeri interi consecutivi in un indice. Il primo caso utilizzava molte più pagine il secondo.
SQL Server offre una funzionalità simile? In tal caso: puoi indicarmi un po 'di documentazione su questa funzione?
AGGIORNAMENTO: dagli esperimenti forniti di seguito, sembra che i nodi foglia siano mantenuti non divisi e i nodi interni siano divisi 50% / 50%. Ciò rende gli alberi B sui tasti crescenti più compatti rispetto ai tasti casuali. Tuttavia, l'approccio del 90% / 10% di Oracle è ancora migliore, e cerco ancora della documentazione ufficiale che possa verificare il comportamento osservato negli esperimenti.