Come funziona il database di indicizzazione di lavoro?

Dato che l’indicizzazione è così importante come il vostro set di dati aumenta di dimensioni, qualcuno può spiegare come l’indicizzazione lavora in un database indipendente dal livello?

Per informazioni sulle query di indice di un campo, check-out Come faccio a indice di una colonna del database.

InformationsquelleAutor Xenph Yan | 2008-08-04

 

8 Replies
  1. 3389

    Perché è necessario?

    Quando i dati vengono memorizzati sul disco basato su dispositivi di memorizzazione, viene memorizzato come blocchi di dati. Questi blocchi possono essere consultati nella loro interezza, che li rende atomica disco operazione di accesso. Blocchi del disco sono strutturati in modo molto simile a come liste collegate; entrambi contengono una sezione per i dati, un puntatore alla posizione del nodo successivo (o blocco), ed entrambi non hanno bisogno di essere memorizzati in modo contiguo.

    A causa del fatto che un certo numero di record che possono essere ordinate in un unico campo, possiamo affermare che la ricerca su un campo che non è ordinato richiede una Ricerca Lineare, che richiede N/2 bloccare accessi (in media), dove N è il numero di blocchi che si estende la tabella. Se tale campo non è un campo chiave (cioè non contiene voci univoche), l’intero spazio di tabella devono essere cercati N bloccare accessi.

    Considerando che con un campo ordinato, una Ricerca Binaria può essere utilizzato, che ha log2 N bloccare accessi. Inoltre, poiché i dati sono ordinati dato un non-campo chiave, il resto del tavolo non ha bisogno di essere cercato per valori duplicati, una volta che un superiore valore. Pertanto, l’incremento di prestazioni è notevole.

    Che cos’è l’indicizzazione?

    Di indicizzazione è un modo di ordinare un numero di record su più campi. La creazione di un indice su un campo di una tabella si crea un’altra struttura di dati che contiene il valore del campo, e un puntatore al record a cui si riferisce. Questo indice di struttura è quindi ordinata, permettendo Binario di Ricerche effettuate su di essa.

    Il rovescio della medaglia per l’indicizzazione è che questi indici richiedono spazio aggiuntivo su disco, dal momento che gli indici vengono memorizzate in una tabella utilizzando il motore MyISAM, questo file può raggiungere rapidamente i limiti di dimensione dei file di sistema sottostante se molti campi della stessa tabella sono indicizzati.

    Come funziona?

    In primo luogo, proviamo a delineare una tabella di database di esempio di schema;

    Nome campo Dimensione del tipo di Dati su disco 
    id (chiave Primaria) Unsigned INT 4 byte 
    nome Char(50) 50 byte 
    cognome Char(50) 50 byte 
    emailAddress Char(100) 100 byte 
    

    Nota: char è stato utilizzato al posto di varchar al fine di consentire una precisa dimensione su disco valore.
    Questo database di esempio contiene cinque milioni di righe e non indicizzata. Le prestazioni di diverse query saranno ora analizzati. Questi sono una query utilizzando il id (ordinato campo chiave) e uno con il nome (non chiave misti di campo).

    Esempio 1ordinati vs indifferenziati campi

    Dato il nostro database di esempio di r = 5,000,000 record di una dimensione fissa dando una lunghezza di registrazione di R = 204 byte e sono memorizzate in una tabella utilizzando il motore MyISAM che utilizza la dimensione del blocco B = 1,024 byte. Il fattore di blocco della tabella sarebbe bfr = (B/R) = 1024/204 = 5 record per blocco del disco. Il numero totale di blocchi necessari per tenere il tavolo è N = (r/bfr) = 5000000/5 = 1,000,000 blocchi.

    Lineare e di ricerca sul campo id richiederebbe una media di N/2 = 500,000 bloccare accessi per trovare un valore, dato che il campo id è un campo chiave. Ma dal momento che il campo id è anche ordinato, un binario di ricerca può essere condotta che richiedono una media di log2 1000000 = 19.93 = 20 bloccare accessi. Immediatamente si può vedere che questo è un drastico miglioramento.

    Ora il nome campo non è né ordinato né un campo chiave, in modo che una ricerca binaria è impossibile, né sono i valori unici e, quindi, la tabella richiedono la ricerca al fine di una esatta N = 1,000,000 bloccare accessi. È questa una situazione che l’indicizzazione mira a correggere.

    Che, dato un indice di record contiene solo il campo indicizzato e un puntatore al record originale, è ovvio che sarà più piccola di multi-campo record di punti. Quindi l’indice di per sé richiede un minor numero di blocchi del disco rispetto alla tabella originale, che quindi necessita di un minor numero di bloccare gli accessi a scorrere. Lo schema di un indice sul nome campo è descritto di seguito;

    Nome campo Dimensione del tipo di Dati su disco 
    nome Char(50) 50 byte 
    (puntatore del record) Speciale 4 byte 
    

    Nota: Puntatori in MySQL sono 2, 3, 4 o 5 byte di lunghezza a seconda della dimensione della tabella.

    Esempio 2di indicizzazione

    Dato il nostro database di esempio di r = 5,000,000 record con un indice del record di lunghezza di R = 54 byte e utilizzando la dimensione del blocco B = 1,024 byte. Il fattore di blocco dell’indice sarebbe bfr = (B/R) = 1024/54 = 18 record per blocco del disco. Il numero totale di blocchi necessari per tenere l’indice è N = (r/bfr) = 5000000/18 = 277,778 blocchi.

    Ora una ricerca utilizzando il nome campo può utilizzare l’indice per migliorare le prestazioni. Questo permette una ricerca binaria dell’indice con una media di log2 277778 = 18.08 = 19 bloccare accessi. Per trovare l’indirizzo del record, che richiede un ulteriore blocco di accesso per la lettura, portando il totale a 19 + 1 = 20 bloccare accessi, un grido lontano da 1.000.000 di bloccare accessi necessari per trovare un nome corrispondenza nella tabella non indicizzate.

    Quando dovrebbe essere utilizzato?

    Dato che la creazione di un indice richiede ulteriore spazio su disco (277,778 blocchi extra per l’esempio di cui sopra, un ~aumento del 28%), e che anche molti indici possono causare problemi derivanti dai sistemi di file di dimensioni nei limiti, particolare attenzione deve essere utilizzato per selezionare i campi corretti per indice.

    Dal indici sono utilizzati al solo fine di accelerare la ricerca di un campo di confronto all’interno del record, è ovvio che i campi di indicizzazione utilizzato solo per l’uscita, sarebbe semplicemente uno spreco di spazio su disco e tempo di elaborazione quando si fa un’operazione di inserimento o eliminazione, e quindi dovrebbe essere evitato. Inoltre, data la natura di una ricerca binaria, la cardinalità o l’univocità dei dati è importante. Indicizzazione su un campo con una cardinalità di 2 divisione di dati a metà, mentre la cardinalità di 1.000 dovrebbe restituire circa 1.000 record. Con un basso cardinalità l’efficacia è ridotta a un ordinamento lineare, e il query optimizer evitare di utilizzare l’indice se la cardinalità è meno del 30% del numero di record, rendendo effettivamente l’indice di uno spreco di spazio.

    • ricerca binaria può essere fatto quando i dati è unica, dico bene? anche se lei ha detto che cardinalità minima è importante, l’algoritmo non sarebbe una semplice ricerca binaria, come sarebbe questa approssimazione (~log2 n) influenzano il tempo di processo?
    • Questa è anche una grande lettura: kylebanker.com/blog/2010/09/21/the-joy-of-mongodb-indexes
    • Così un indice è solo un modo per ordinare i dati in una colonna e mantenere quella sorta di ordine pratico per accedere rapidamente a colonna elementi ? Se si aggiorna una colonna non indicizzata, quindi le prestazioni non dovrebbero essere influenzati, giusto ? Domanda correlata – stackoverflow.com/questions/16124690/…
    • “e’ ovvio che i campi di indicizzazione utilizzato solo per l’uscita, sarebbe semplicemente uno spreco” Questo non è del tutto vero se si considerano gli indici di copertura. Un indice di copertura risponderà a quesiti tirando solo i valori dell’indice, senza dover cercare i record corrispondenti.
    • domanda!Penso che la tabella dell’indice avrà un numero di righe della tabella di dati. E come in questo campo hanno solo 2 valori booleano(true/false) & dici che vuoi un record con valore true,allora si può solo dimezzare il set di risultati nel primo passaggio, nel secondo passaggio di tutti i record hanno valore true in modo non vi è alcuna base per differenziare,ora dovete cercare la tabella di dati in modo lineare-quindi ha detto cardinalità deve essere considerato, mentre decidere la colonna indicizzata. In questo caso,è inutile indice ad una colonna. Speranza ho corretto 🙂
    • non il numero di bloccare accessi in media del caso (N+1)/2. Se si somma il numero di bloccare accessi per tutti i casi possibili, e si divide per il numero di casi, quindi abbiamo N*(N+1)/(2*n) per essere (N+1)/2.
    • Maggiore della cardinalità campi può fare uso di indici bitmap. E ‘ progettato specificamente per i campi che contengono un sacco di valori duplicati, ad esempio, un campo di sesso.
    • Finalmente chiarito. Ho una domanda in più. Se una tabella è piccola e soggiorno di piccole dimensioni (ad esempio un elenco di paese) sembra che non l’indicizzazione è sia una vittoria in tempo e spazio su disco. Su grandi tavoli di indicizzazione campi CHAR dovrebbe essere evitato se possibile, soprattutto se la ricerca su campi CHAR sono piuttosto rari. Ed è forse per questo grande forum solo per consentire una ricerca per parole chiave, ogni minuto.
    • Penso che ci sono un paio di errori di battitura in questa risposta, per esempio, nella frase: “un grido lontano dal 277,778 bloccare accessi richiesti dalla tabella non indicizzate.” non l’autore 1.000.000 bloccare accessi? 277,778 è il numero di blocchi necessari dall’indice stesso. Sembra che ci sia un altro paio di imprecisioni di troppo 🙁
    • La risposta non sembra spiegare che l’indice è ordinato? I. e. essi saltare solo per questa spiegazione: “Ora una ricerca utilizzando il nome di campo può utilizzare l’indice per migliorare le prestazioni. Questo permette una ricerca binaria dell’indice con una media di log2 277778 = 18.08 = 19 bloccare accessi” – l’indice DEVE essere ordinati in ordine per la ricerca binaria per essere possibile, ma non vedo che ha spiegato ovunque.
    • Sarebbe anche bello se ci fosse una spiegazione di come l’indicizzazione lavora su più campi, la risposta che da solo spiega l’indicizzazione di un singolo campo, il nome di battesimo
    • L’ha spiegato in “che Cos’è l’indicizzazione sezione” – “l’Indicizzazione è un modo di ordinare un numero di record su più campi. La creazione di un indice su un campo di una tabella si crea un’altra struttura di dati che contiene il valore del campo, e il puntatore del record a cui si riferisce. Questo indice di struttura è quindi ordinata, permettendo Binario di Ricerche effettuate su di essa.”
    • Nel secondo esempio, perché abbiamo bisogno di memorizzare i firstName? Non è il puntatore abbastanza? Dobbiamo solo cambiare semplicemente la funzione di confronto per (*pointer).firstName.
    • Ci puoi dire i riferimenti da cui si può imparare questi ?
    • cordiali saluti, la ricerca binaria non viene utilizzato in una struttura b-tree ricerche. La sua performance sarà terribile quando l’indice non si adatta in memoria. Il motivo per ‘gli indici b-tree’ è quello di essere veloce anche se non tutti l’indice si inserisce la memoria disponibile. Si tratta di ‘fan’ di tasti a dove trovare i dati. Albero binario è un ‘fan’ della 2. ‘b-alberi” può avere fan-out di ‘invece piu’ di 10 o più – dipende dalla dimensione della chiave e ‘di dimensioni di pagina’.
    • Può spiegare perché “la ricerca in un campo che non è ordinato richiede una Ricerca Lineare, che richiede N/2 bloccare accessi (in media)”? Perché è N/2 e non N?
    • Penso che significa Average.
    • i futuri lettori) Re: commento su 1,000,00 vs 277,778 – ho solo invertito una modifica di apportare questa modifica, perché ho pensato che il riferimento era corretta. Rileggendo sia per la risposta e per il tuo commento più attentamente, però, si sono assolutamente corrette, si sta parlando di originali misti di campo e non la dimensione dell’indice. Ho cambiato il numero (oops), a 1 milione e riformulato cose un po ‘ (e.g ha sostituito ‘tavolo’ con ‘l’indice’), per chiarire il contesto della 277,778
    • Mi manca qualcosa o When should it be used? punto di non rispondere alla domanda. Piuttosto descrive “Quando non è utilizzato?”. Così, quando dovrebbe essere utilizzato?
    • Solo per essere pulita quando diciamo Creating an index on a field in a table creates another data structure which holds the field value, and pointer to the record it relates to. questo è per non indice cluster. Per indice cluster che può essere solo per un tavolo, questo non è vero poiché i dati originali è memorizzato in modo ordinato utilizzando..
    • Come possiamo eseguire binary search su dati ordinati se non sono memorizzati in blocchi contigui ?
    • Ho provato indexing non-campo chiave, le cose stanno andando peggio per query di selezione. Come faccio a capire questo?
    • Ho perso dopo il primo comma Due to the fact that a number of records can only be sorted on one field, si può spiegare questo o correggere la frase.
    • indice indice hash, non necessario, deve essere ordinato. Quello che hai detto è solo una sorta di indice.
    • Grazie per il brillante, spiegazione approfondita. Se potessi ipotizzare una spiegazione della mia (probabilmente improprio e sbagliato): l’indicizzazione nome di battesimo è come l’aggiunta di un elenco ordinato id nome che correlano le voci di quel campo, che consente la Ricerca Binaria?
    • Qualcuno può spiegare perché la ricerca su un campo che non è ordinato, ma uniche voci richiede N/2 bloccare accessi in media e la ricerca su un campo che non è un campo chiave (non contiene voci univoche) richiede N bloccare accessi? Non si richiedono N in quanto è una ricerca lineare?
    • Si supponga di avere un elenco di numeri univoci in ordine casuale. Se volete sapere se un valore è lì, si guarda il 1°, il 2°, 3°, ecc… fino a trovare una corrispondenza. Una volta trovato non c’è bisogno di continuare la ricerca, il valore è unico e presente solo una volta. A volte sarà una partita molto presto, a volte ci vuole un po ‘ per trovarlo, ma in media ti attraversano la metà della lista. Se i valori non sono gli unici che si possono trovare nel primo spot, ma potrebbe essere non c’è un’altra ricorrenza ulteriormente! Di trovare tutto il necessario per passare attraverso l’intero elenco ogni volta. Così N.
    • Non ho avuto l’ultima parte, però ho understannd “cardinalità” è “il numero di valori distinti in una colonna”.
    • se si cerca un elenco di valori unici, per tutti i record con un certo valore, allora si inizia dall’inizio e di ricerca di ogni record, uno per uno. Quando si trova il record con il valore desiderato, quindi… ci si ferma. Perché non si smette? Perché si sa il valore è unico e quindi non più record con quel valore. Dato che i valori sono ordinati in presenza di pari propability a trovare record nel primo, secondo e così via fino all’ultimo. Questo significa che si può interrompere la ricerca dopo il 1 ° lettura. A volte si può interrompere dopo il 100 ° letto etc. In media si fermerà a circa n/2 legge.
    • Ma quando i valori non sono univoci si avvia la ricerca dal 1 ° record. Si va al 2°. Quindi, in i-esimo record si trova il valore che si sta cercando. Sei pronto a smettere di cercare, ma poi si pensa… hmm, tali valori non sono gli unici…. Forse ci sono altri record con quel valore… meglio continuare a cercare…. In modo efficace, si finisce la ricerca di tutti i record di ogni tempo! Di conseguenza, in media (in realtà è la stessa cosa ogni volta) si ricerca n record. Così con un unico valore di interrompere la ricerca, quando si trova quello. Non unico, non si fermano fino a quando si cerca di loro tutti.
    • L’accesso ai dati sul file system non è la stessa come l’accesso in memoria. (*puntatore).il nome significa leggere un blocco (per leggere il puntatore) e di nuovo un altro blocco (per leggere il nome). Inoltre si batte la fine dell’indice. Un indice è ordinato catalogo (visione semplicistica, ma necessarie per capire).
    • Per esempio, immaginate di questa struttura. Una persona che ha un nome (il campo di ricerca), un indirizzo (il puntatore che punta dove si può trovare quella persona) e un’età. Volete sapere l’età del signor John Smith. Il modo corretto per farlo è quello di prendere l’indirizzo di catalogo (un enorme libro che associa i nomi, indirizzi), che è l’INDICE nel nostro caso. Cercate il signor smith nel catalogo. Perché è ordinato, non c’è bisogno di guardare l’intero di esso. Lo si può trovare con 3-5 girare la pagina. Poi si conosce l’indirizzo. Vai lì, e di estrarre le informazioni.

  2. 233

    La prima volta che ho letto questo è stato molto utile per me. Grazie.

    Da allora ho acquisito una certa conoscenza circa il rovescio della medaglia della creazione di indici:
    se si scrive in una tabella (UPDATE o INSERT) con un indice, si hanno due operazioni di scrittura nel file system. Uno per i dati della tabella e l’altra per i dati dell’indice (e il ricorso (e – cluster – il ricorso della tabella di dati)). Se la tabella e indice si trovano sullo stesso disco rigido, questo costa di più tempo. Quindi una tabella senza un indice (heap) , consentirebbe una più veloce le operazioni di scrittura. (se si dispone di due indici si finirebbe con tre operazioni di scrittura, e così via)

    Tuttavia, la definizione di due posizioni diverse su due dischi per i dati dell’indice e i dati della tabella possono diminuire/eliminare il problema di un aumento dei costi di tempo. Questo richiede la definizione di ulteriori gruppi di file con il secondo file sui dischi rigidi e la definizione di tabella/index posizione desiderata.

    Un altro problema con gli indici è la loro frammentazione nel tempo dei dati inseriti. REORGANIZE aiuta, è necessario scrivere le routine per averlo fatto.

    In alcuni scenari di un heap è più utile di una tabella con gli indici,

    e.g:- Se hai un sacco di sonore che scrive, ma solo una di notte leggi di fuori degli orari di apertura per la segnalazione.

    Inoltre, una differenziazione tra i cluster e gli indici non cluster è piuttosto importante.

    Mi ha aiutato:- Cosa Cluster e Non indice cluster in realtà significa?

    • Penso che questi indicizzazione problemi possono essere risolti mediante il mantenimento di due database diversi, proprio come Master e Slave. Dove il Maestro può essere utilizzato per inserire o aggiornare i record. Senza di indicizzazione. E slave può essere utilizzato per leggere con corretta indicizzazione giusto???
    • no, sbagliato, mi dispiace. non solo il contenuto delle tabelle deve essere aggiornato, ma anche l’indice di struttura e il contenuto (struttura b-tree nodes). il tuo concetto di master e slave non ha nessun senso qui. che cosa può essere realizzabile, però, è la replica o il mirroring di un secondo database su cui analytics per prendere il carico di distanza dal primo database. che secondo database sarebbe in possesso di copie di dati e indici su tali dati.
    • Ya…! Prova a leggere il mio commento e capire bene. Anche io ho detto la stessa cosa, ho fatto riferimento a master e slave (quello che è) come “eplicating o il mirroring di un secondo database su cui analytics per prendere il carico di distanza dal primo database. che secondo database sarebbe in possesso di copie di dati e indici di dati”
    • il secondo database a cui mirroring o la replica è fatto, lo schiavo – esperienza di tutti i dati di manipolazione come il primo. con ogni dml-operazione gli indici che secondo database esperienza di “indicizzazione” problemi”. non vedo il guadagno, nel senso che, ove mai gli indici sono necessari e costruito per l’analisi rapida di cui hanno bisogno per essere sempre aggiornato.
  3. 222

    Classico esempio “l’Indice dei Libri”

    Considerare un “Libro” di 1000 pagine, diviso 100 sezioni, ogni sezione con X pagine.

    Semplice, eh?

    Ora, senza una pagina di indice, per trovare una particolare sezione che inizia con la lettera “S”, non hai altra opzione di scansione attraverso tutto il libro. io.e: 1000 pagine

    Ma con una pagina di indice all’inizio, se ci sono. E di più, per leggere qualsiasi particolare sezione che conta, è solo bisogno di guardare oltre la pagina di indice, ancora e ancora, ogni volta. Dopo aver trovato il corrispondente indice potete saltare alla sezione saltando altre sezioni.

    Ma poi, oltre a 1000 pagine, avrete bisogno di un altro ~10 pagine per visualizzare la pagina di indice, in modo totalmente 1010 pagine.

    Così, l’indice è una sezione separata che memorizza i valori di colonna indicizzata + puntatore al indicizzati fila ordinati per efficiente look-up.

    Le cose sono semplici nelle scuole, non è vero? 😛

    • davvero bella analogia! divertente non ho fatto il collegamento tra un indice di libro e un db indice di
    • Questo mi fa pensare Library o Grocery Store potresti immagine non ha un indice in un negozio di alimentari? Where's The Beef?!? Oh its next to the Restrooms, a mop, and makeup
    • “Ma con una pagina di indice all’inizio, ci sei.” Che cosa significa “si ci sono” significa?
    • Indici di solito andare sul retro di libri, mentre un indice va nella parte anteriore. Ma, che rende l’analogia anche meglio, visto che l’ordine delle colonne non importa.
    • La tua spiegazione non è così facile da prendere. Altre persone tendono ad usare sofisticato termini per spiegare le cose. Vorrei poter dare più di un upvote.
    • Questo è uno dei più semplici e migliori risposte finora. Anche una scuola di un bambino può capire questo. Vorrei, se ci potrebbe essere di più come questi! Purtroppo, posso solo dare 1 upvote.

  4. 217

    Un indice è solo una struttura di dati che rende la ricerca più veloce per una specifica colonna di un database. Questa struttura è di solito un b-albero o una tabella di hash, ma può essere qualsiasi altra struttura logica.

    • +1 volte, un milione per questa risposta, come ho trovato questo annuncio durante il tentativo di trovare una semplice spiegazione di che cosa è l’indicizzazione è essenzialmente.
    • Notiamo che “solo una struttura di dati” non significa “ulteriori dati”. Alcune volte è (ad esempio “indice non cluster”), alcune volte si determina il layout dei dati (ad esempio “indice cluster”).
  5. 142

    Ora, diciamo che si desidera eseguire una query per trovare tutti i dettagli di tutti i dipendenti che sono chiamati ‘Abc’?

    SELECT * FROM Employee 
    WHERE Employee_Name = 'Abc'

    Cosa succede senza un indice?

    Software di Database sarebbe letteralmente a guardare ogni singola riga della tabella Dipendenti per vedere se il Employee_Name per la riga è ‘Abc’. E, perché ogni riga con il nome di ‘Abc’ all’interno di esso, si può semplicemente smettere di guardare una volta abbiamo trovato una sola riga con il nome di ‘Abc’, perché ci potrebbero essere altre righe con il nome Abc. Così, ogni riga fino all’ultima riga deve essere cercato – il che significa che migliaia di righe in questo scenario, dovranno essere esaminate dal database per trovare le righe con il nome di ‘Abc’. Questo è quello che viene chiamato un scansione completa della tabella

    Come un indice del database può migliorare le prestazioni

    Il punto di avere un indice per velocizzare le query di ricerca essenzialmente il taglio verso il basso il numero di record/righe di una tabella, che devono essere esaminati. Un indice è una struttura di dati (più comunemente un B – tree) che memorizza i valori per una specifica colonna di una tabella.

    Come B-alberi indice?

    Il motivo B – alberi sono più popolari struttura di dati per gli indici è dovuto al fatto che essi sono efficienti perché look-up, delezioni e inserzioni può essere fatto in tempo logaritmico. E, un altro motivo principale B – alberi sono più comunemente utilizzati perché i dati che sono memorizzati all’interno della struttura B – tree possono essere ordinati. RDBMS in genere determina quali dati struttura è in realtà usato per un indice. Ma, in alcuni casi, con alcuni RDBMS è, effettivamente, è possibile specificare i dati di struttura che si desidera il vostro database da utilizzare quando si crea l’indice stesso.

    Come una tabella hash indice?

    Il motivo di indici hash vengono utilizzati perché le tabelle hash sono estremamente efficienti quando si tratta solo di ricerca di valori. Così, le query che si confronta per la parità di una stringa di recupero di valori molto veloce se si utilizza un indice hash.

    Per esempio, la query di cui abbiamo parlato in precedenza, potrebbe beneficiare di un indice hash creato sul Employee_Name colonna. Il modo in cui un indice hash sarebbe lavoro è che il valore della colonna sarà la chiave nella tabella hash e il valore effettivo associato a tale chiave, potrebbe essere semplicemente un puntatore alla riga di dati nella tabella. Dal momento che una tabella hash è fondamentalmente un array associativo, una tipica voce sarebbe qualcosa come “Abc => 0x28939”, dove 0x28939 è un riferimento ad una riga della tabella di cui Abc è memorizzato nella memoria. La ricerca di un valore come “Abc” in una tabella hash di indice e di tornare un riferimento alla riga in memoria è, ovviamente, molto più veloce di scansione della tabella per trovare tutte le righe con valore di “Abc” in Employee_Name colonna.

    Gli svantaggi di un indice hash

    Tabelle di Hash non sono ordinati strutture di dati, e ci sono molti tipi di query che indici hash non può anche aiutare con. Per esempio, supponiamo che si desidera trovare tutti i dipendenti che sono meno di 40 anni. Come si poteva fare con una tabella hash indice? Beh, non è possibile a causa di una tabella hash è solo un bene per la ricerca di coppie chiave-valore – il che significa che le query di controllo per la parità

    Che cosa è esattamente all’interno di un database di indice?
    Così, ora sapete che un indice del database viene creato in una colonna in una tabella, e che l’indice memorizza i valori nella colonna specifica. Ma, è importante capire che un indice del database non memorizza i valori nelle altre colonne della stessa tabella. Per esempio, se vogliamo creare un indice sul Employee_Name colonna, questo significa che il Employee_Age e Employee_Address valori di colonna non sono archiviati anche nell’indice. Se abbiamo fatto solo di memorizzare tutte le altre colonne nell’indice, quindi sarebbe proprio come la creazione di un’altra copia di tutta la tabella – che ci portano via troppo spazio e sarebbe molto inefficiente.

    Come funziona un database di sapere quando utilizzare un indice?
    Quando una query del tipo “SELECT * FROM Impiegato WHERE Employee_Name = ‘Abc’ ” è in esecuzione, il database per verificare se c’è un indice sulla colonna(s) di essere interrogato. Supponendo che il Employee_Name colonna ha un indice creato su di esso, il database dovrà decidere se effettivamente ha senso utilizzare l’indice per trovare i valori da cercare – perché ci sono alcuni scenari in cui la realtà è meno efficiente di utilizzare l’indice del database, e più efficiente solo per la scansione dell’intera tabella.

    Qual è il costo di avere un indice del database?

    Occupa spazio e il più grande il vostro tavolo, il più grande il vostro indice. Un altro colpo di prestazioni con gli indici, è il fatto che ogni volta che è possibile aggiungere, eliminare o aggiornare le righe della tabella corrispondente, le stesse operazioni dovrà essere fatto per il vostro indice. Si ricordi che l’indice deve contenere lo stesso, minuto per minuto dei dati, come tutto ciò che è nella colonna della tabella(s) che l’indice copre.

    Come regola generale, un indice deve essere creato solo su di un tavolo, se i dati nella colonna indicizzata sarà interrogato spesso.

    Vedere anche

    1. Le colonne, in generale, buona indici?
    2. Come indici del database di lavoro
    • “un indice del database non memorizza i valori nelle altre colonne” — non è vero.
    • Archivi di indice di riferimento di riga con le colonne indicizzate solo (per quel che so). Potrei essere sbagliato. Hai qualche riferimento che dice archivi di indice altri valori delle colonne?
    • Downvoters : mi Puoi spiegare cosa c’è di sbagliato in modo che io possa migliorare?
    • Verificare, ad esempio, SQL Server clustering indici o DB2 del CREATE INDEX ... INCLUDE clausola. Hai troppe generalizzazioni nella tua risposta, a mio modo di vedere.
    • Quindi, per impostazione predefinita create index non comprende le altre colonne e perché dovrebbe. If we did just store all the other columns in the index, then it would be just like creating another copy of the entire table, which would take up way too much space and would be very inefficient.. Questo è più generalizzata versione di indici. CREATE INDEX ... INCLUDE è la versione più recente da prendere in considerazione anche altre colonne. Post ho spiegato è considerare più generalizzata versione. Come indici di lavoro, sarebbe un libro, se consideriamo tutti i database? Non è vero? Pensi che la risposta merita downvote?
    • Questo è fondamentalmente estratto da programmerinterview.com/index.php/database-sql/what-is-an-index Forse si potrebbe aggiungere che
    • c’è un concetto chiamato “indice di copertura”. A volte si desidera aggiungere più campi per il nostro indice, se sappiamo che molte query verrà utilizzato SELEZIONARE con i campi solo, permettendoci così di evitare di leggere le righe effettivo. Naturalmente, questo ha un deposito-costo (più grande la dimensione dell’indice).

  6. 76

    Semplice Descrizione!

    L’indice è nulla, ma una struttura di dati che memorizza i valori di una colonna specifica in una tabella. Viene creato un indice su una colonna di una tabella.

    Esempio: Abbiamo una tabella di database chiamato User con tre colonne – Name, Age e Address. Si supponga che il User tabella di migliaia di righe.

    Ora, diciamo che si desidera eseguire una query per trovare tutti i dettagli di tutti gli utenti che sono denominati “Giovanni”.
    Se vogliamo eseguire la seguente query:

    SELECT * FROM User 
    WHERE Name = 'John'

    Il software di database sarebbe letteralmente a guardare ogni singola riga nel User tabella per vedere se il Name per la riga è “Giovanni”. Questo richiederà un lungo periodo di tempo.

    Questo è dove index ci aiuta: indice viene utilizzato per velocizzare le query di ricerca essenzialmente il taglio verso il basso il numero di record/righe in una tabella che deve essere esaminato.

    Come creare un indice:

    CREATE INDEX name_index
    ON User (Name)

    Un index consiste valori della colonna(ad Esempio: John) da una tabella, e tali valori vengono memorizzati in un struttura di dati.

    Così ora il database di utilizzare l’indice per trovare i dipendenti di nome John
    poiché l’indice, presumibilmente, ordinati alfabeticamente per la
    Nome degli utenti. E, perché è ordinato, significa cercare un nome
    è molto più veloce perché tutti i nomi che iniziano con la “J” sarà giusto
    accanto all’altro nell’indice!

    • Un indice non implica l’ordinamento della colonna
    • Grazie. Questo ha aiutato la mia comprensione. Quindi, fondamentalmente, un indice è una replica della colonna di dati che sono stati ordinati. Normalmente la colonna di dati è solo nell’ordine di inserimento dei dati.
  7. 32

    Solo un rapido suggerimento.. Come di indicizzazione costi aggiuntivi scrive e spazio di archiviazione, quindi, se la vostra applicazione richiede più operazione di inserimento/aggiornamento, si potrebbe desiderare di utilizzare le tabelle senza indici, ma se richiede più dati di operazioni di recupero, si dovrebbe andare per tabella indicizzata.

    • Questo è un commento, non una risposta.
    • È più visibile e quindi più utile in questo modo in quanto è una osservazione generale. Che risposta dovrebbe avere questo stati aggiunti come commento?
    • probabilmente un commento su OP
  8. 31

    Basti pensare Database di Indice di Indice di un libro.

    Se si dispone di un libro sui cani e si desidera trovare informazioni su diciamo, Pastori tedeschi, naturalmente è possibile sfogliare tutte le pagine del libro e trovare quello che stai cercando – ma questo, naturalmente, è che richiede tempo, e non molto veloce.

    Un’altra opzione è che si può solo andare alla sezione di Indice del libro e poi trovare che cosa state cercando utilizzando il Nome dell’entità che si sta cercando ( in questo caso, Pastori tedeschi) e anche guardando il numero di pagina per trovare rapidamente quello che stai cercando.

    Nel Database, il numero di pagina si riferisce a come un puntatore che dirige il database per l’indirizzo sul disco in cui entità è situato. Utilizzando lo stesso Pastore tedesco analogia, si potrebbe avere qualcosa di simile a questo (“Pastore tedesco”, 0x77129) dove 0x77129 è l’indirizzo sul disco in cui la riga di dati per il Pastore tedesco è memorizzato.

    In breve, un indice è una struttura dati che memorizza i valori per una determinata colonna in una tabella in modo da velocizzare la query di ricerca.

Lascia un commento