Ho letto in molti libri e articoli SQL che la selettività è un fattore importante nella creazione dell'indice. Se una colonna ha una bassa selettività, una ricerca indice fa più male che bene. Ma nessuno degli articoli spiega perché. Qualcuno può spiegare perché è così, o fornire un link a un articolo pertinente?Ruolo della selettività nella scansione indice/ricerca
risposta
Dall'articolo SimpleTalk da Robert Sheldon: 14 SQL Server Indexing Questions You Were Too Shy To Ask
Il rapporto dei valori unici all'interno di una colonna chiave viene indicato come indice selettività. Più i valori sono univoci, maggiore è la selettività, , il che significa che un indice univoco ha la massima selettività possibile. Il motore di query ama le colonne chiave altamente selettive, specialmente se le colonne fanno riferimento nella clausola WHERE delle query di esecuzione di frequente . Maggiore è la selettività, più velocemente il motore di query può ridurre la dimensione del set di risultati. Il rovescio della medaglia, ovviamente, è che una colonna con relativamente pochi valori unici raramente è un buon candidato da indicizzare.
controllare anche questi articoli:
- Controllare this post da Pinal Dave
- this other su SQL Serverpedia
- This forum post su SqlServerCentral può aiutare anche voi.
- This article su SqlServerCentral anche
Dall'articolo SqlServerCentral:
In generale, un indice non cluster dovrebbe essere selettiva. Vale a dire, i valori nella colonna dovrebbero essere abbastanza unici e le query che filtrano su di esso dovrebbero restituire piccole parti della tabella.
La ragione di questo è che le ricerche chiave/RID sono operazioni costose e se un indice non cluster deve essere utilizzato per valutare una query deve essere coprendo o sufficientemente selettivi che i costi delle ricerche non sono ritenuto troppo alto
Se SQL considera l'indice (o il sottoinsieme delle chiavi di indice che la query sarebbe sollecitare con) non sufficientemente selettivi, allora è molto probabile che l'indice viene ignorato e la query eseguita come un indice cluster (tabella) scansione.
È importante notare che questo non si applica solo alla colonna principale. Esistono scenari in cui una colonna molto non selezionabile può essere utilizzata come colonna principale, con le altre colonne dell'indice che rendono abbastanza selettiva da essere utilizzata.
provo a scrivere una spiegazione molto semplice (in base alla mia attuale conoscenza di SQL Server):
Se un indice ha una bassa selettività significa che per lo stesso valore percentuale maggiore del totale righe sono trovato.(come 200 dalle 500 righe ha lo stesso valore sull'indice)
Di solito se l'indice non contiene tutte le informazioni sulla colonna di ciò che serve, allora sta usando un puntatore, dove trovare la riga fisicamente che è collegato a quella "voce" sull'indice. Quindi in un secondo momento il motore deve leggere quella riga.
Così come si vede una ricerca come questa utilizzando due passaggi. E qui arriva la selettività:
Altri risultati si ottengono grazie alla bassa selettività più doppio lavoro che il motore deve fare. Quindi ci sono alcuni casi a causa di questo fatto in cui anche una scansione della tabella è più efficiente di una ricerca indice con selettività molto bassa.
Ma il numero di risultati è maggiore anche per la scansione delle tabelle. Almeno in caso di ricerca indice, il salto alla porzione del blocco dati contenente i record simili è più veloce. – SexyBeast
Ma con la scansione di una tabella stai leggendo una volta, non una specie di due volte. E devi calcolare il tempo di "headmove" negli harddrives non ssd che è il più costoso dell'intero processo. –
- 1. Problema nella scansione completa della tabella in cassandra
- 2. Qual è il ruolo della soggettività nella programmazione?
- 3. Perché viene eseguita una scansione della tabella?
- 4. scansione della pagina Web dinamica utilizzando htmlunit
- 5. Ruolo della nuova parola chiave in Java
- 6. Scansione per segnali wifi solo nella banda 2,4 Ghz
- 7. In Windows Azure: quali sono il ruolo Web, il ruolo del lavoratore e il ruolo della macchina virtuale?
- 8. Scansione "mappatura"
- 9. Impostazione ruolo gruppo FOSUserBackle
- 10. ASP.NET MVC Controllare il ruolo all'interno della vista
- 11. ansible: include il ruolo in un ruolo?
- 12. Come testare il ruolo di lavoratore azzurro nella macchina locale?
- 13. La vista MySQL esegue sempre la scansione completa della tabella?
- 14. ruby regex scansione contro = ~
- 15. Weblogic: disabilita scansione jersey
- 16. Come stile CSS ruolo
- 17. Qual è il ruolo della "copia" nel ARC
- 18. Qual è il ruolo della sintassi "interface {}" in Go?
- 19. Qual è il ruolo della classe di attività in MVC?
- 20. Ruolo - corretto pattern MVC
- 21. Asp.net MVC Responsabile ruolo
- 22. WIA Scansione tramite alimentatore
- 23. Scansione di Google Scholar
- 24. Impostazione scansione di copertura?
- 25. Scansione Logback non funzionante
- 26. Scansione Hbase con offset
- 27. Android AOSP - Definizione dell'intervallo di scansione e finestra di scansione nel codice sorgente Android
- 28. API di scansione virus .NET
- 29. Oracle spiegare il piano previsionale delle cardinalità non corretta per una gamma di indice di scansione
- 30. Plone: Aggiungi autorizzazione al ruolo
Siete i benvenuti, assicuratevi di testare prima di entrare in produzione per evitare i tempi di fermo e quindi i visi arrabbiati degli utenti;) – Yaroslav