Mysql
 sql >> Database >  >> RDS >> Mysql

Differenze tra INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?

Differenze

  • CHIAVE o INDICE si riferisce a un normale indice non univoco. Sono consentiti valori non distinti per l'indice, quindi l'indice può contengono righe con valori identici in tutte le colonne dell'indice. Questi indici non impongono alcuna restrizione ai tuoi dati, quindi vengono utilizzati solo per l'accesso, per raggiungere rapidamente determinati intervalli di record senza eseguire la scansione di tutti i record.

  • UNICO fa riferimento a un indice in cui tutte le righe dell'indice devono essere univoche. Ovvero, la stessa riga potrebbe non avere valori non NULL identici per tutte le colonne in questo indice come per un'altra riga. Oltre ad essere utilizzati per raggiungere rapidamente determinati intervalli di record, gli indici UNIQUE possono essere utilizzati per imporre restrizioni sui dati, poiché il sistema di database non consente di violare la regola dei valori distinti durante l'inserimento o l'aggiornamento dei dati.

    Il tuo sistema di database può consentire l'applicazione di un indice UNIQUE alle colonne che consentono valori NULL, nel qual caso due righe possono essere identiche se contengono entrambe un valore NULL (la logica qui è che NULL è considerato non uguale a se stesso). A seconda della tua applicazione, tuttavia, puoi trova questo indesiderabile:se desideri evitarlo, non consentire i valori NULL nelle colonne pertinenti.

  • PRIMARIO agisce esattamente come un indice UNIQUE, tranne per il fatto che è sempre chiamato 'PRIMARY', e può essercene solo uno su una tabella (e lì dovrebbe sii sempre uno; anche se alcuni sistemi di database non lo applicano). Un indice PRIMARY è inteso come mezzo principale per identificare in modo univoco qualsiasi riga nella tabella, quindi a differenza di UNIQUE non dovrebbe essere utilizzato su colonne che consentano valori NULL. L'indice PRIMARY deve trovarsi sul numero minimo di colonne sufficiente per identificare in modo univoco una riga. Spesso, questa è solo una colonna contenente un numero univoco auto-incrementato, ma se c'è qualcos'altro che può identificare in modo univoco una riga, come "codice paese" in un elenco di paesi, puoi invece utilizzarlo.

    Alcuni sistemi di database (come InnoDB di MySQL) memorizzeranno i record di una tabella su disco nell'ordine in cui appaiono nell'indice PRIMARY.

  • TESTO COMPLETO gli indici sono diversi da tutti i precedenti e il loro comportamento differisce in modo significativo tra i sistemi di database. Gli indici FULLTEXT sono utili solo per ricerche di testo completo eseguite con la clausola MATCH() / AGAINST(), a differenza delle tre precedenti - che sono tipicamente implementate internamente utilizzando b-trees (consentendo la selezione, l'ordinamento o gli intervalli a partire dalla colonna più a sinistra) o tabelle hash (consentendo la selezione a partire dalla colonna più a sinistra).

    Laddove gli altri tipi di indice sono di uso generale, un indice FULLTEXT è specializzato, in quanto serve a uno scopo ristretto:viene utilizzato solo per una funzione di "ricerca full-text".

Somiglianze

  • Tutti questi indici possono contenere più di una colonna.

  • Ad eccezione di FULLTEXT, l'ordine delle colonne è significativo:affinché l'indice sia utile in una query, la query deve utilizzare colonne dell'indice a partire da sinistra - non può utilizzare solo la seconda, terza o quarta parte di un index, a meno che non utilizzi anche le colonne precedenti nell'indice per abbinare valori statici. (Affinché un indice FULLTEXT sia utile per una query, la query deve utilizzare all colonne dell'indice.)