Template designed byIndici: Come, Quando, PerchéDavide Mauridmauri@solidq.comwww.davidemauri.it
brought to you by
Works with SQL Server from 6.5, on BI from 2003Specialized in Data Solution Architecture, DatabaseDesign, Performance Tuni...
Indici e chiaviArchitettura dello storageTipi di indiciUtilizzo degli indiciGestione e manutenzioneQuery TuningAgenda4
Perché una sessione sugli indici?•Dopo il modello dei dati sono gli strumenti che – utilizzatiin modo corretto - permetton...
Primary keyInsieme (minimo) delle colonne che permettono l’identificazione univoca di una rigatra tutte le altreForeign Ke...
Index keysInsieme delle colonne che compongono l’indiceATTENZIONE!INDICI e CHIAVI (PK e FK) non hanno nulla in comune!!!!!...
I dati presenti in tabelle (ed indici) sono memorizzati inpaginegrosse circa 8KbL’unità di I/O più piccola per SQL Server ...
RelazionaliClusteredNon Clustered• Included Columns, Filtered Indexes• Column Store«Beyond Relational»XML / Full Text / Sp...
Strutture ad albero rovesciatoB+ TreesClustered IndexesRootNon-LeafNon-Leaf Non-LeafLeaf(Table Data)Leaf(Table Data)Leaf(T...
Le pagine non-foglia permettono di capire in quali pagine sottostanti stail dato che si sta cercandoLe pagine foglia conte...
Di default è messo sulla PKMa si può spostare!!!Può essere costruito su colonne non univocheUna tabella senza indice clust...
Anche in questo caso B+ TreesNon-Clustered (Row-Store) IndexesRootNon-LeafNon-Leaf Non-LeafLeaf(Index Data)Leaf(Index Data...
GRANDI DIFFERENZE con il clusterLe pagine foglia NON contengono tutti i dati…• …ma solo i valori delle chiavi dell’indiceE...
I puntatori possono essereRow Ids (se Heap)Clustering Keys (se esiste indice cluster)Ergo:Gli indici non-cluster sono cost...
Se indice cluster non univoco?Univocità mantenuta in automatico da SQL……costa 4 byte per riga!ATTENZIONE! Più è grande la ...
Included ColumnsColonne i cui valori non sono indicizzati MA sono inclusi nelle pagine fogliadell’indicePermettono di migl...
La riga di dati viene decomposta nelle singole colonneDati memorizzati in segmenti e dizionariNon-Clustered (Column-Store)...
Non è importante l’ordine delle colonneE’ una buona idea mettere TUTTE le colonne nell’indiceLa tabella diventa read-only ...
OrdinamentiGroup byRange SearchInsert• Se e solo se l’indice è costruito su valori sempre crescenti• Assicura che le pagin...
Solo se altissima selettivitàSelettività = righe interessate / righe totaliOverhead dato dall’operazione di “Bookmark look...
Tipicamente in un Data Warehouse / Data MartOppure soluzione DSS (Decision Support System)Ideale con uno Star SchemaIdeale...
Indici di copertura (Covering Index)Non-Cluster“Misto” (Non-Cluster + Cluster)Indici che, da solo, è in grado di soddisfar...
Tramite le “Included Colums” è possible creare indici dicopertura più efficientiNon metto tutte le colonne della query com...
Index in Action!
Numero di indiciMax 249 (Non Cluster)Max 1 (Cluster)Numero max di colonne per indice: 16Dimensione massima chiave dell’ind...
Obbiettivo: abbassare il più possibile le operazioni di I/OIn letturaIn scritturaTanti indici(potenzialmente) più velocità...
Possibilità di VEDERE se per UNA query mancano degliindiciXML SHOWPLANMissingIndexesStatisticsDMVs:sys.dm_db_missing_index...
Serve TEMPO e PAZIENZAAnalisi I/O, TIME, Execution Plans, Cardinality EstimationOltre che un ambiente di TEST il più possi...
Occhio alle stored procedureSe i dati sono molto disomogenei come distribuzione valutare l’uso di WITHRECOMPILEIn alcuni c...
Grazie a tutti per la partecipazioneRiceverete il link per il download a slide e demo via email neiprossimi giorniPer cont...
Upcoming SlideShare
Loading in …5
×

Indici - Come, Quando, Perchè

553 views

Published on

Ogni database (relazionale e non) necessità di indici per poter fornire delle prestazioni ottimali. I database relazionali non scappano a questa regola ed, anzi, hanno nell'indicizzaione una grandissima opportunità per fornire prestazioni estreme. In questa sessioni vedremo i tipi di indici che abbiamo a disposizione, come si usano e come NON si usano e come possono migliorare le performance delle applicazioni.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
553
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Indici - Come, Quando, Perchè

  1. 1. Template designed byIndici: Come, Quando, PerchéDavide Mauridmauri@solidq.comwww.davidemauri.it
  2. 2. brought to you by
  3. 3. Works with SQL Server from 6.5, on BI from 2003Specialized in Data Solution Architecture, DatabaseDesign, Performance Tuning, BIMicrosoft SQL Server MVPPresident of UGISS (Italian SQL Server UG)Mentor @ SolidQRegular Speaker @ SQL Server eventsConsulting & TrainingDavide Mauri3
  4. 4. Indici e chiaviArchitettura dello storageTipi di indiciUtilizzo degli indiciGestione e manutenzioneQuery TuningAgenda4
  5. 5. Perché una sessione sugli indici?•Dopo il modello dei dati sono gli strumenti che – utilizzatiin modo corretto - permettono di ottenere le performancepiù alte!
  6. 6. Primary keyInsieme (minimo) delle colonne che permettono l’identificazione univoca di una rigatra tutte le altreForeign KeyChiavi Primarie “migrate” in una tabella collegataIndici e chiavi
  7. 7. Index keysInsieme delle colonne che compongono l’indiceATTENZIONE!INDICI e CHIAVI (PK e FK) non hanno nulla in comune!!!!!Semplicemente – per motivi per performance – le chiavi (PK e FK) usano gli indici.Indici e chiavi
  8. 8. I dati presenti in tabelle (ed indici) sono memorizzati inpaginegrosse circa 8KbL’unità di I/O più piccola per SQL Server è la paginaLe pagine sono raggruppate in extentExtent = 8 pagine da 8 KbArchitettura dello storage
  9. 9. RelazionaliClusteredNon Clustered• Included Columns, Filtered Indexes• Column Store«Beyond Relational»XML / Full Text / SpatialTipi di indici
  10. 10. Strutture ad albero rovesciatoB+ TreesClustered IndexesRootNon-LeafNon-Leaf Non-LeafLeaf(Table Data)Leaf(Table Data)Leaf(Table Data)Leaf(Table Data)Leaf(Table Data)
  11. 11. Le pagine non-foglia permettono di capire in quali pagine sottostanti stail dato che si sta cercandoLe pagine foglia contengono i dati della tabellaL’indice cluster ordina “fisicamente” i datiUn solo indice cluster per tabellaClustered Indexes
  12. 12. Di default è messo sulla PKMa si può spostare!!!Può essere costruito su colonne non univocheUna tabella senza indice cluster si chiama “Heap”Clustered Indexes
  13. 13. Anche in questo caso B+ TreesNon-Clustered (Row-Store) IndexesRootNon-LeafNon-Leaf Non-LeafLeaf(Index Data)Leaf(Index Data)Leaf(Index Data)Leaf(Index Data)Leaf(Index Data)
  14. 14. GRANDI DIFFERENZE con il clusterLe pagine foglia NON contengono tutti i dati…• …ma solo i valori delle chiavi dell’indiceE’ una struttura dati separata• Quindi “pesa” e comporta un overheadLe pagine foglia contengono dei puntatori alle pagine dati della tabella• I puntatori sono diversi a seconda dell’esistenza o meno di un indice clusterNon-Clustered (Row-Store) Indexes
  15. 15. I puntatori possono essereRow Ids (se Heap)Clustering Keys (se esiste indice cluster)Ergo:Gli indici non-cluster sono costruiti sull’indice clusterNelle loro pagine foglia portano con se la clustering keyNon-Clustered (Row-Store) Indexes
  16. 16. Se indice cluster non univoco?Univocità mantenuta in automatico da SQL……costa 4 byte per riga!ATTENZIONE! Più è grande la chiave di cluster….…più spazio occupato nell’indice non cluster!Non-Clustered (Row-Store) Indexes
  17. 17. Included ColumnsColonne i cui valori non sono indicizzati MA sono inclusi nelle pagine fogliadell’indicePermettono di migliorare, in alcuni casi, le prestazioniIndici di coperturaNon-Clustered (Row-Store) Indexes
  18. 18. La riga di dati viene decomposta nelle singole colonneDati memorizzati in segmenti e dizionariNon-Clustered (Column-Store) Indexes18Source: http://dl.acm.org/citation.cfm?id=1989448
  19. 19. Non è importante l’ordine delle colonneE’ una buona idea mettere TUTTE le colonne nell’indiceLa tabella diventa read-only !Quindi aggiornamento tramite swtich partitionNon-Clustered (Column-Store) Indexes
  20. 20. OrdinamentiGroup byRange SearchInsert• Se e solo se l’indice è costruito su valori sempre crescenti• Assicura che le pagine dei dati siano i memoria• E se non avete *troppe* insert (>15000Batch/sec)Utilizzo: Indice Cluster
  21. 21. Solo se altissima selettivitàSelettività = righe interessate / righe totaliOverhead dato dall’operazione di “Bookmark lookup”Nell’execution-plan in SQL 2005 non è visibile come operatore ad-hoc ma come jointra cluster (o heap) e non-clusterUtilizzo: Non Cluster
  22. 22. Tipicamente in un Data Warehouse / Data MartOppure soluzione DSS (Decision Support System)Ideale con uno Star SchemaIdeale per query con group byUtilizzo: Non Cluster ColumnStore
  23. 23. Indici di copertura (Covering Index)Non-Cluster“Misto” (Non-Cluster + Cluster)Indici che, da solo, è in grado di soddisfare una query“Copre” tutti i campi della queryPrima chiave dell’indice = prima colonna nella clausola whereMigliora di MOLTO le prestazioni in lettura!Utilizzo: Di Copertura
  24. 24. Tramite le “Included Colums” è possible creare indici dicopertura più efficientiNon metto tutte le colonne della query come chiaviMetto solo quelle usate per ricerca i valori (WHERE, GROUP BY)Le colonne usate in SELECT … FROM le “includo”Impatta solo sulle dimensioni delle pagine fogliaUtilizzo: Di Copertura
  25. 25. Index in Action!
  26. 26. Numero di indiciMax 249 (Non Cluster)Max 1 (Cluster)Numero max di colonne per indice: 16Dimensione massima chiave dell’indice: 900 byteLe included columns non contano!Max 1023 included columns per indexLimiti
  27. 27. Obbiettivo: abbassare il più possibile le operazioni di I/OIn letturaIn scritturaTanti indici(potenzialmente) più velocità in lettura(sicuramente) meno velocità in scritturaRegola Aurea OLTPPOCHI MA BUONIPerformance Considerations
  28. 28. Possibilità di VEDERE se per UNA query mancano degliindiciXML SHOWPLANMissingIndexesStatisticsDMVs:sys.dm_db_missing_index_*Altre DMVs & DMFs molto Utilisys.indexes & sys.indexes_columnssys.dm_db_index_usage_statssys.dm_db_index_physical_stats()Query Tuning
  29. 29. Serve TEMPO e PAZIENZAAnalisi I/O, TIME, Execution Plans, Cardinality EstimationOltre che un ambiente di TEST il più possibile uguale aquello di produzioneLe performance dell’I/O sono determinantiQuery Tuning
  30. 30. Occhio alle stored procedureSe i dati sono molto disomogenei come distribuzione valutare l’uso di WITHRECOMPILEIn alcuni casi (UPDATE/DELETE) gli indici aiutano adiminuire le dimensione dei lock!Query Tuning
  31. 31. Grazie a tutti per la partecipazioneRiceverete il link per il download a slide e demo via email neiprossimi giorniPer contattarmidmauri@solidq.comGrazie

×