SlideShare uma empresa Scribd logo
1 de 31
Template designed by
Indici: Come, Quando, Perché
Davide Mauri
dmauri@solidq.com
www.davidemauri.it
brought to you by
Works with SQL Server from 6.5, on BI from 2003
Specialized in Data Solution Architecture, Database
Design, Performance Tuning, BI
Microsoft SQL Server MVP
President of UGISS (Italian SQL Server UG)
Mentor @ SolidQ
Regular Speaker @ SQL Server events
Consulting & Training
Davide Mauri
3
Indici e chiavi
Architettura dello storage
Tipi di indici
Utilizzo degli indici
Gestione e manutenzione
Query Tuning
Agenda
4
Perché una sessione sugli indici?
•Dopo il modello dei dati sono gli strumenti che – utilizzati
in modo corretto - permettono di ottenere le performance
più alte!
Primary key
Insieme (minimo) delle colonne che permettono l’identificazione univoca di una riga
tra tutte le altre
Foreign Key
Chiavi Primarie “migrate” in una tabella collegata
Indici e chiavi
Index keys
Insieme delle colonne che compongono l’indice
ATTENZIONE!
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
I dati presenti in tabelle (ed indici) sono memorizzati in
pagine
grosse circa 8Kb
L’unità di I/O più piccola per SQL Server è la pagina
Le pagine sono raggruppate in extent
Extent = 8 pagine da 8 Kb
Architettura dello storage
Relazionali
Clustered
Non Clustered
• Included Columns, Filtered Indexes
• Column Store
«Beyond Relational»
XML / Full Text / Spatial
Tipi di indici
Strutture ad albero rovesciato
B+ Trees
Clustered Indexes
Root
Non-LeafNon-Leaf Non-Leaf
Leaf
(Table Data)
Leaf
(Table Data)
Leaf
(Table Data)
Leaf
(Table Data)
Leaf
(Table Data)
Le pagine non-foglia permettono di capire in quali pagine sottostanti sta
il dato che si sta cercando
Le pagine foglia contengono i dati della tabella
L’indice cluster ordina “fisicamente” i dati
Un solo indice cluster per tabella
Clustered Indexes
Di default è messo sulla PK
Ma si può spostare!!!
Può essere costruito su colonne non univoche
Una tabella senza indice cluster si chiama “Heap”
Clustered Indexes
Anche in questo caso B+ Trees
Non-Clustered (Row-Store) Indexes
Root
Non-LeafNon-Leaf Non-Leaf
Leaf
(Index Data)
Leaf
(Index Data)
Leaf
(Index Data)
Leaf
(Index Data)
Leaf
(Index Data)
GRANDI DIFFERENZE con il cluster
Le pagine foglia NON contengono tutti i dati…
• …ma solo i valori delle chiavi dell’indice
E’ una struttura dati separata
• Quindi “pesa” e comporta un overhead
Le pagine foglia contengono dei puntatori alle pagine dati della tabella
• I puntatori sono diversi a seconda dell’esistenza o meno di un indice cluster
Non-Clustered (Row-Store) Indexes
I puntatori possono essere
Row Ids (se Heap)
Clustering Keys (se esiste indice cluster)
Ergo:
Gli indici non-cluster sono costruiti sull’indice cluster
Nelle loro pagine foglia portano con se la clustering key
Non-Clustered (Row-Store) Indexes
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
Included Columns
Colonne i cui valori non sono indicizzati MA sono inclusi nelle pagine foglia
dell’indice
Permettono di migliorare, in alcuni casi, le prestazioni
Indici di copertura
Non-Clustered (Row-Store) Indexes
La riga di dati viene decomposta nelle singole colonne
Dati memorizzati in segmenti e dizionari
Non-Clustered (Column-Store) Indexes
18
Source: http://dl.acm.org/citation.cfm?id=1989448
Non è importante l’ordine delle colonne
E’ una buona idea mettere TUTTE le colonne nell’indice
La tabella diventa read-only !
Quindi aggiornamento tramite swtich partition
Non-Clustered (Column-Store) Indexes
Ordinamenti
Group by
Range Search
Insert
• 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
Solo se altissima selettività
Selettività = righe interessate / righe totali
Overhead dato dall’operazione di “Bookmark lookup”
Nell’execution-plan in SQL 2005 non è visibile come operatore ad-hoc ma come join
tra cluster (o heap) e non-cluster
Utilizzo: Non Cluster
Tipicamente in un Data Warehouse / Data Mart
Oppure soluzione DSS (Decision Support System)
Ideale con uno Star Schema
Ideale per query con group by
Utilizzo: Non Cluster ColumnStore
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 query
Prima chiave dell’indice = prima colonna nella clausola where
Migliora di MOLTO le prestazioni in lettura!
Utilizzo: Di Copertura
Tramite le “Included Colums” è possible creare indici di
copertura più efficienti
Non metto tutte le colonne della query come chiavi
Metto solo quelle usate per ricerca i valori (WHERE, GROUP BY)
Le colonne usate in SELECT … FROM le “includo”
Impatta solo sulle dimensioni delle pagine foglia
Utilizzo: Di Copertura
Index in Action!
Numero di indici
Max 249 (Non Cluster)
Max 1 (Cluster)
Numero max di colonne per indice: 16
Dimensione massima chiave dell’indice: 900 byte
Le included columns non contano!
Max 1023 included columns per index
Limiti
Obbiettivo: abbassare il più possibile le operazioni di I/O
In lettura
In scrittura
Tanti indici
(potenzialmente) più velocità in lettura
(sicuramente) meno velocità in scrittura
Regola Aurea OLTP
POCHI MA BUONI
Performance Considerations
Possibilità di VEDERE se per UNA query mancano degli
indici
XML SHOWPLAN
MissingIndexesStatistics
DMVs:
sys.dm_db_missing_index_*
Altre DMVs & DMFs molto Utili
sys.indexes & sys.indexes_columns
sys.dm_db_index_usage_stats
sys.dm_db_index_physical_stats()
Query Tuning
Serve TEMPO e PAZIENZA
Analisi I/O, TIME, Execution Plans, Cardinality Estimation
Oltre che un ambiente di TEST il più possibile uguale a
quello di produzione
Le performance dell’I/O sono determinanti
Query Tuning
Occhio alle stored procedure
Se i dati sono molto disomogenei come distribuzione valutare l’uso di WITH
RECOMPILE
In alcuni casi (UPDATE/DELETE) gli indici aiutano a
diminuire le dimensione dei lock!
Query Tuning
Grazie a tutti per la partecipazione
Riceverete il link per il download a slide e demo via email nei
prossimi giorni
Per contattarmi
dmauri@solidq.com
Grazie

Mais conteúdo relacionado

Semelhante a Indici - Come, Quando, Perchè

MongoDB
MongoDBMongoDB
MongoDBNaLUG
 
Esercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6edEsercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6edbibliobioing
 
SlideModellingDataSat.pdf
SlideModellingDataSat.pdfSlideModellingDataSat.pdf
SlideModellingDataSat.pdfMarco Pozzan
 
Data modelling for Power BI
Data modelling for Power BIData modelling for Power BI
Data modelling for Power BIMarco Pozzan
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Massimo Cenci
 
Ecdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-datiEcdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-datiMatekanc
 
Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...
Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...
Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...laboratoridalbasso
 
Azure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsAzure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsMarco Parenzan
 
IBM i db2 udb vs Microsoft SQL Server
IBM i db2 udb vs Microsoft SQL ServerIBM i db2 udb vs Microsoft SQL Server
IBM i db2 udb vs Microsoft SQL ServerRiccardo De Mattia
 
Dynamic Schema e Schemaless Tables
Dynamic Schema e Schemaless TablesDynamic Schema e Schemaless Tables
Dynamic Schema e Schemaless TablesDavide Mauri
 
Risorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.edRisorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.edbibliobioing
 
DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)Alessandro Giorgetti
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009Massimiliano Dessì
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meetingguest67beeb9
 

Semelhante a Indici - Come, Quando, Perchè (20)

NoSql - Key Value
NoSql - Key ValueNoSql - Key Value
NoSql - Key Value
 
Data Base In Open Office
Data Base In Open OfficeData Base In Open Office
Data Base In Open Office
 
SQL Server2000
SQL Server2000SQL Server2000
SQL Server2000
 
MongoDB
MongoDBMongoDB
MongoDB
 
Basi Di Dati 01
Basi Di Dati 01Basi Di Dati 01
Basi Di Dati 01
 
Esercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6edEsercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6ed
 
SlideModellingDataSat.pdf
SlideModellingDataSat.pdfSlideModellingDataSat.pdf
SlideModellingDataSat.pdf
 
Data modelling for Power BI
Data modelling for Power BIData modelling for Power BI
Data modelling for Power BI
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
 
Ecdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-datiEcdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-dati
 
Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...
Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...
Ldb 25 strumenti gis e webgis_2014-05-15 gullotta - 4 tabelle attributi e lor...
 
Azure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsAzure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT Solutions
 
IBM i db2 udb vs Microsoft SQL Server
IBM i db2 udb vs Microsoft SQL ServerIBM i db2 udb vs Microsoft SQL Server
IBM i db2 udb vs Microsoft SQL Server
 
Dynamic Schema e Schemaless Tables
Dynamic Schema e Schemaless TablesDynamic Schema e Schemaless Tables
Dynamic Schema e Schemaless Tables
 
Risorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.edRisorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.ed
 
MongoDB
MongoDBMongoDB
MongoDB
 
DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
 
Database relazionali
Database relazionaliDatabase relazionali
Database relazionali
 

Mais de Davide Mauri

Azure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstartAzure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstartDavide Mauri
 
Agile Data Warehousing
Agile Data WarehousingAgile Data Warehousing
Agile Data WarehousingDavide Mauri
 
Dapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDavide Mauri
 
When indexes are not enough
When indexes are not enoughWhen indexes are not enough
When indexes are not enoughDavide Mauri
 
Building a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with AzureBuilding a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with AzureDavide Mauri
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveDavide Mauri
 
Azure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSONAzure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSONDavide Mauri
 
SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2Davide Mauri
 
SQL Server 2016 What's New For Developers
SQL Server 2016  What's New For DevelopersSQL Server 2016  What's New For Developers
SQL Server 2016 What's New For DevelopersDavide Mauri
 
Azure Stream Analytics
Azure Stream AnalyticsAzure Stream Analytics
Azure Stream AnalyticsDavide Mauri
 
Azure Machine Learning
Azure Machine LearningAzure Machine Learning
Azure Machine LearningDavide Mauri
 
Dashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BIDashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BIDavide Mauri
 
Azure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applicationsAzure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applicationsDavide Mauri
 
Event Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsEvent Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsDavide Mauri
 
SQL Server 2016 JSON
SQL Server 2016 JSONSQL Server 2016 JSON
SQL Server 2016 JSONDavide Mauri
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveDavide Mauri
 
Real Time Power BI
Real Time Power BIReal Time Power BI
Real Time Power BIDavide Mauri
 
AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)Davide Mauri
 
Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Davide Mauri
 
Azure Machine Learning (Italian)
Azure Machine Learning (Italian)Azure Machine Learning (Italian)
Azure Machine Learning (Italian)Davide Mauri
 

Mais de Davide Mauri (20)

Azure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstartAzure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstart
 
Agile Data Warehousing
Agile Data WarehousingAgile Data Warehousing
Agile Data Warehousing
 
Dapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDapper: the microORM that will change your life
Dapper: the microORM that will change your life
 
When indexes are not enough
When indexes are not enoughWhen indexes are not enough
When indexes are not enough
 
Building a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with AzureBuilding a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with Azure
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep Dive
 
Azure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSONAzure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSON
 
SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2
 
SQL Server 2016 What's New For Developers
SQL Server 2016  What's New For DevelopersSQL Server 2016  What's New For Developers
SQL Server 2016 What's New For Developers
 
Azure Stream Analytics
Azure Stream AnalyticsAzure Stream Analytics
Azure Stream Analytics
 
Azure Machine Learning
Azure Machine LearningAzure Machine Learning
Azure Machine Learning
 
Dashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BIDashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BI
 
Azure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applicationsAzure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applications
 
Event Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsEvent Hub & Azure Stream Analytics
Event Hub & Azure Stream Analytics
 
SQL Server 2016 JSON
SQL Server 2016 JSONSQL Server 2016 JSON
SQL Server 2016 JSON
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep Dive
 
Real Time Power BI
Real Time Power BIReal Time Power BI
Real Time Power BI
 
AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)
 
Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)
 
Azure Machine Learning (Italian)
Azure Machine Learning (Italian)Azure Machine Learning (Italian)
Azure Machine Learning (Italian)
 

Indici - Come, Quando, Perchè

  • 1. Template designed by Indici: Come, Quando, Perché Davide Mauri dmauri@solidq.com www.davidemauri.it
  • 3. Works with SQL Server from 6.5, on BI from 2003 Specialized in Data Solution Architecture, Database Design, Performance Tuning, BI Microsoft SQL Server MVP President of UGISS (Italian SQL Server UG) Mentor @ SolidQ Regular Speaker @ SQL Server events Consulting & Training Davide Mauri 3
  • 4. Indici e chiavi Architettura dello storage Tipi di indici Utilizzo degli indici Gestione e manutenzione Query Tuning Agenda 4
  • 5. Perché una sessione sugli indici? •Dopo il modello dei dati sono gli strumenti che – utilizzati in modo corretto - permettono di ottenere le performance più alte!
  • 6. Primary key Insieme (minimo) delle colonne che permettono l’identificazione univoca di una riga tra tutte le altre Foreign Key Chiavi Primarie “migrate” in una tabella collegata Indici e chiavi
  • 7. Index keys Insieme delle colonne che compongono l’indice ATTENZIONE! 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. I dati presenti in tabelle (ed indici) sono memorizzati in pagine grosse circa 8Kb L’unità di I/O più piccola per SQL Server è la pagina Le pagine sono raggruppate in extent Extent = 8 pagine da 8 Kb Architettura dello storage
  • 9. Relazionali Clustered Non Clustered • Included Columns, Filtered Indexes • Column Store «Beyond Relational» XML / Full Text / Spatial Tipi di indici
  • 10. Strutture ad albero rovesciato B+ Trees Clustered Indexes Root Non-LeafNon-Leaf Non-Leaf Leaf (Table Data) Leaf (Table Data) Leaf (Table Data) Leaf (Table Data) Leaf (Table Data)
  • 11. Le pagine non-foglia permettono di capire in quali pagine sottostanti sta il dato che si sta cercando Le pagine foglia contengono i dati della tabella L’indice cluster ordina “fisicamente” i dati Un solo indice cluster per tabella Clustered Indexes
  • 12. Di default è messo sulla PK Ma si può spostare!!! Può essere costruito su colonne non univoche Una tabella senza indice cluster si chiama “Heap” Clustered Indexes
  • 13. Anche in questo caso B+ Trees Non-Clustered (Row-Store) Indexes Root Non-LeafNon-Leaf Non-Leaf Leaf (Index Data) Leaf (Index Data) Leaf (Index Data) Leaf (Index Data) Leaf (Index Data)
  • 14. GRANDI DIFFERENZE con il cluster Le pagine foglia NON contengono tutti i dati… • …ma solo i valori delle chiavi dell’indice E’ una struttura dati separata • Quindi “pesa” e comporta un overhead Le pagine foglia contengono dei puntatori alle pagine dati della tabella • I puntatori sono diversi a seconda dell’esistenza o meno di un indice cluster Non-Clustered (Row-Store) Indexes
  • 15. I puntatori possono essere Row Ids (se Heap) Clustering Keys (se esiste indice cluster) Ergo: Gli indici non-cluster sono costruiti sull’indice cluster Nelle loro pagine foglia portano con se la clustering key Non-Clustered (Row-Store) Indexes
  • 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. Included Columns Colonne i cui valori non sono indicizzati MA sono inclusi nelle pagine foglia dell’indice Permettono di migliorare, in alcuni casi, le prestazioni Indici di copertura Non-Clustered (Row-Store) Indexes
  • 18. La riga di dati viene decomposta nelle singole colonne Dati memorizzati in segmenti e dizionari Non-Clustered (Column-Store) Indexes 18 Source: http://dl.acm.org/citation.cfm?id=1989448
  • 19. Non è importante l’ordine delle colonne E’ una buona idea mettere TUTTE le colonne nell’indice La tabella diventa read-only ! Quindi aggiornamento tramite swtich partition Non-Clustered (Column-Store) Indexes
  • 20. Ordinamenti Group by Range Search Insert • 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. Solo se altissima selettività Selettività = righe interessate / righe totali Overhead dato dall’operazione di “Bookmark lookup” Nell’execution-plan in SQL 2005 non è visibile come operatore ad-hoc ma come join tra cluster (o heap) e non-cluster Utilizzo: Non Cluster
  • 22. Tipicamente in un Data Warehouse / Data Mart Oppure soluzione DSS (Decision Support System) Ideale con uno Star Schema Ideale per query con group by Utilizzo: Non Cluster ColumnStore
  • 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 query Prima chiave dell’indice = prima colonna nella clausola where Migliora di MOLTO le prestazioni in lettura! Utilizzo: Di Copertura
  • 24. Tramite le “Included Colums” è possible creare indici di copertura più efficienti Non metto tutte le colonne della query come chiavi Metto solo quelle usate per ricerca i valori (WHERE, GROUP BY) Le colonne usate in SELECT … FROM le “includo” Impatta solo sulle dimensioni delle pagine foglia Utilizzo: Di Copertura
  • 26. Numero di indici Max 249 (Non Cluster) Max 1 (Cluster) Numero max di colonne per indice: 16 Dimensione massima chiave dell’indice: 900 byte Le included columns non contano! Max 1023 included columns per index Limiti
  • 27. Obbiettivo: abbassare il più possibile le operazioni di I/O In lettura In scrittura Tanti indici (potenzialmente) più velocità in lettura (sicuramente) meno velocità in scrittura Regola Aurea OLTP POCHI MA BUONI Performance Considerations
  • 28. Possibilità di VEDERE se per UNA query mancano degli indici XML SHOWPLAN MissingIndexesStatistics DMVs: sys.dm_db_missing_index_* Altre DMVs & DMFs molto Utili sys.indexes & sys.indexes_columns sys.dm_db_index_usage_stats sys.dm_db_index_physical_stats() Query Tuning
  • 29. Serve TEMPO e PAZIENZA Analisi I/O, TIME, Execution Plans, Cardinality Estimation Oltre che un ambiente di TEST il più possibile uguale a quello di produzione Le performance dell’I/O sono determinanti Query Tuning
  • 30. Occhio alle stored procedure Se i dati sono molto disomogenei come distribuzione valutare l’uso di WITH RECOMPILE In alcuni casi (UPDATE/DELETE) gli indici aiutano a diminuire le dimensione dei lock! Query Tuning
  • 31. Grazie a tutti per la partecipazione Riceverete il link per il download a slide e demo via email nei prossimi giorni Per contattarmi dmauri@solidq.com Grazie