Domanda

Nella documentazione per vari ORM hanno sempre forniscono un modo per creare gli indici, ecc Essi citano sempre per essere sicuri di creare gli indici appropriati per l'efficienza, come se cioè la conoscenza inerente ad una che ha bisogno di non scritto a mano-SQLer per usare un ORM. La mia comprensione degli indici (al di fuori della PK) è fondamentalmente: Se avete intenzione di fare domande LIKE (vale a dire, di ricerca) in base al contenuto di una colonna, è necessario utilizzare un indice completo per quella colonna. Che altro dovrei sapere per quanto riguarda gli indici (per lo più di pertinenza di efficienza)? Mi sento come se ci fosse un mondo di conoscenze alla mia porta passo, ma c'è un grande mouse pad piegato inceppata sotto di essa, quindi non posso ottenere attraverso (non so il motivo per cui mi sono sentito come se avessi bisogno di dire che, ma grazie per fornire il divano).

È stato utile?

Soluzione

Pensate a un indice molto approssimativamente come l'indice nella parte posteriore di un libro. E 'una zona completamente separata dal contenuto del libro, in cui, se siete in cerca di un po' di valore specifico, si può andare al indice e guardare in su (indici sono ordinate, in modo da trovare le cose v'è molto più veloce di scansione di ogni pagina del libro ).

La voce di indice ha un numero di pagina, in modo da poter poi rapidamente andare alla pagina che cercano il vostro soggetto. Un indice di database è molto simile; si tratta di una lista ordinata delle informazioni pertinenti nel database (il campo (s) inclusi nell'indice), con le informazioni per il database per trovare i record corrispondenti.

Quindi ... si potrebbe creare un indice quando si dispone di informazioni che è necessario per cercare di frequente. indici normali non ti aiutano per 'parziale' cerca come domande come, ma ogni volta che si ha bisogno di ottenere una serie di risultati in cui il campo X ha certo valore (s), mantengono il DBMS dalla necessità di 'scan' l'intera tabella , alla ricerca di valori corrispondenti.

Sono anche aiuto quando è necessario ordinare una colonna.

Un'altra cosa da tenere a mente; Se il DBMS consente di creare singoli indici che hanno più campi, essere sicuri di studiare gli effetti di questo modo, specifica per DBMS. Un indice che comprende più campi rischia solo di essere pienamente (o affatto) utile se tutti i campi vengono utilizzati in una query. Viceversa, avendo più indici per una singola tabella, con un campo per ciascun indice, non può essere di molto (o qualsiasi) aiuto per le query filtrando / ordinamento per più campi.


Hai menzionato indici Full Text e PK (chiavi primarie). Questi sono diversi rispetto agli indici normali, anche se spesso servono scopi simili.

In primo luogo, si noti che una chiave primaria di solito è un indice (in MSSQL, un 'Clustered Index', appunto), ma questo non ha bisogno di essere il caso specifico. A titolo di esempio, un MSSQL PK è un Clustered Index di default; indici cluster sono speciali in quanto non sono un po 'separata dei dati memorizzati altrove, ma i dati stessi sono disposti nella tabella in ordine dal indice cluster. Questo è il motivo per cui un PK popolare è un valore int che è auto-generato con sequenziale, valori crescenti. Quindi, un indice cluster ordina i dati nella tabella specifico dal valore del campo. Confronta questo a un dizionario tradizionale; le voci si sono ordinate per la 'chiave', che è la parola in via di definizione.

Ma in MSSQL (consultare la documentazione DBMS per vostra informazione), è possibile modificare l'indice cluster di essere un campo diverso, se volete. A volte questo viene fatto su campi in base datetime.


indici di testo completo sono diversi tipi di bestie del tutto. Usano alcuni degli stessi principi, ma quello che stanno facendo non è esattamente la stessa di indici normali, che sto descrivendo. Inoltre: in query, LIKE di alcune DBMS fanno non utilizzare l'indice testo completo; sono necessari operatori di query speciali.

Questi indici sono diversi perché il loro intento non è quello di trovare / sorta sull'intero valore della colonna (un numero, una data, un po 'a corto di dati char), ma invece di trovare singole parole / frasi all'interno del campo di testo (s) essendo indicizzati.

Si può anche spesso consentire la ricerca di parole simili, diversi tempi, errori di ortografia comuni e simili, e in genere ignorare le parole di rumore. Il diverso modo in cui lavorano è per questo che anche avere bisogno di diversi operatori di usarli. (Di nuovo, controllare la documentazione locale per il vostro DBMS!)

Altri suggerimenti

Questa risposta è Oracle-specifica, ma i punti principali delle risposte si applicano alla maggior parte dei sistemi di database relazionali

Come scegliere e indici di ottimizzare oracolo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top