Ho creato uno script per trovare la selettività di ogni colonna per tutte le tabelle. In alcune tabelle con meno di 100 righe, la selettività di una colonna è superiore al 50%. Dove selettività = valori distinti/numero totale di righe. Queste colonne sono idonee per un indice? Oppure, puoi dirmi il requisito minimo per il numero di righe per creare un indice?Qual è il numero minimo di righe richieste per creare un indice?
risposta
È possibile indicizzare su qualsiasi colonna - la questione è se ha un senso e se verrà utilizzato tale indice ....
Tipicamente, una selettività inferiore al 1-5% potrebbe funzionare - il più piccolo quella percentuale, meglio è. Il migliore sono i singoli valori di una grande popolazione, ad es. un singolo ID cliente su centinaia di migliaia: quegli indici saranno sicuramente utilizzati.
Cose come il genere (solo 2 valori) o altre cose che hanno solo un numero molto limitato di valori possibili in genere non funzionano bene su un indice. Almeno da sole - queste colonne potrebbero essere ok per essere incluse in un altro indice come seconda o terza colonna.
Ma in realtà, l'unico modo per scoprire se un indice di senso è quello di
- misura le vostre domande prima di
- creare l'indice
- eseguire di nuovo le vostre domande, controllare i loro piani di esecuzione , misurare i loro tempi
Non c'è una regola d'oro per quando un indice sarà usato (o ignorato) - troppe variabili giocano in quella decisione.
Per alcuni consigli di esperti su come trattare con gli indici, e come scoprire quali indici potrebbero non abituarsi, e quando ha senso per creare un indice, vedere i post sul blog di Kimberly Tripp:
io non sono sicuro di sql server, ma la maggior parte DBMS non utilizzare un indice per il recupero i f può recuperare tutte le righe della tabella in un singolo I/O. Lo vedrai nelle spiegazioni PLAN, alcune tabelle sono sempre scansionate al tablespace.
IMHO, qualsiasi tabella con meno di 5000 righe non vale la pena analizzare per la cardinalità se il DBMS è in esecuzione su un server.
La maggior parte dei DBMS utilizza una cache per dati e codice (stored procedure, piano di esecuzione, ecc.). In SQL Server mi pare si chiami i dati e procedura di cache, e in Oracle, si chiama la cache del buffer e la SGA. I dati della tabella e/o l'indice possono essere nella cache.
La tabella piccola a cui si accede frequentemente si adatta molto probabilmente alla cache. Ma la tabella può essere sfrattata dalla cache, ad esempio, se una query carica nuovi dati dal disco. Esistono opzioni per indicare che si desidera che una tabella sia permanentemente nella cache (Vedere PINTABLE).Forse è una strategia migliore quella di usare un indice se il tuo tavolo è molto piccolo (che è il tuo caso). Aggiungere un indice (che sarebbe anche sempre nella cache) potrebbe aiutare ulteriormente, ma non so quale sarebbe il guadagno.
Le grandi differenze nelle prestazioni sono l'accesso al disco e l'accesso alla memoria. Scopo dell'indice è ridurre la quantità di dati da leggere dal disco, ma se è già in memoria, il guadagno è probabilmente piccolo.
- 1. selezionare le righe di panda escludendo il numero di indice
- 2. MySQL: quanto tempo è necessario per creare un indice?
- 3. Regex per numero minimo di 9 numeri
- 4. Qual è il modo più semplice ed efficace per creare un heap minimo in Scala?
- 5. Ordina array nel numero minimo di spostamenti
- 6. Numero minimo di operazioni per rendere ordinato un array
- 7. vb.net: numero indice di un "per ogni"
- 8. creare un indice senza bloccare il DB
- 9. Massimizza il numero di sottografi con un peso minimo specificato
- 10. il numero di righe prima e dopo un certo valore di indice in pandi
- 11. Qual è il modo più semplice per inserire un indice in un controllo ripetitore in .NET?
- 12. Come ordinare un array usando il numero minimo di scritture?
- 13. numero di tavola righe
- 14. Trovare elemento minimo di matrice e il suo indice
- 15. Postgres: è questo il modo giusto per creare un indice parziale su una colonna booleana?
- 16. Qual è il modo più veloce per creare richieste Web simultanee in Perl?
- 17. Qual è il numero di prompt IPython?
- 18. Scrapy: limita il numero di richieste o richieste byte
- 19. Qual è il numero massimo di connessioni cURL impostato da?
- 20. Qual è il numero massimo di connessioni?
- 21. Creare un numero sequenziale (contatore) per le righe all'interno di ciascun gruppo di un dataframe
- 22. Il modo più efficiente per creare un indice in Postgres
- 23. Qual è il numero massimo di file per jar?
- 24. Ordinamento di un array con un numero minimo di confronti
- 25. qual è il tempo di esecuzione per l'inserimento di un elemento in qualche indice di arrayList?
- 26. Qual è il valore massimo di un numero in Lua?
- 27. Contare il numero totale di righe in un progetto XCode
- 28. Ottimizzazione delle richieste HTTP: qual è il limite?
- 29. Trovare il numero minimo unico in un array
- 30. xlwt che limita il numero di righe
Ho tabella con 3 valori di interger e tutti sono dostinct. La selettività di questo è superiore al 95%. E questa tabella è usata principalmente con la sola istruzione select. Quindi è possibile creare un indice su questo? – Paresh
significato selettivo del 95%? Tipicamente, si desidera una selettività molto bassa: si desidera che un singolo valore (ID = 55) selezioni solo una quantità minima di righe. Se la tua selettività in tale scenario (percentuale di quante righe del totale saranno selezionate per un dato valore del tuo campo) è inferiore al 5% o anche inferiore all'1%, allora ha sicuramente senso indicizzare. –
"Cose come genere (solo 2 valori)" ora che è il 2018, questa parte della tua risposta è obsoleta. Il genere dovrebbe essere VARCHAR (255) da ora in poi. Personalmente mi identifico come un elicottero d'attacco apache. –