Sante Caserio
pubblicato più di 2 anni fa

Creare un indice

Una sola semplice istruzione per creare un indice in MySQL

Per creare un indice, se non è la chiave primaria, esiste una semplice istruzione CREATE INDEX, come alternativa ad ALTER TABLE.

1CREATE INDEX nome_indice ON nome_tabella (lista_campi);

Il nome dell’indice non è molto importante, tranne per il fatto che viene utilizzato in alcuni messaggi di errore.

nome_tabella è il nome della tabella sulla quale si sta creando l’indice e lista_campi è il campo, o l’elenco dei campi separati da una virgola, che devono essere indicizzati.

E’ possibile indicizzare solo la prima parte di un campo, cioè il prefisso. Ad esempio, si può creare un indice sui primi 5 caratteri di un campo CHAR:

1CREATE INDEX icognome ON clienti (cognome(5));

Il prefisso può essere utilizzato su campi di tipo CHAR, VARCHAR, BINARY, e VARBINARY, mentre deve essere usato per forza se si vuole indicizzare campi TEXT e BLOB, che sono di dimensioni più grandi. Per i campi CHAR, VARCHAR e TEXT il numero tra parentesi indica quanti caratteri devono essere indicizzati, mentre per i campi BINARY, VARBINARY e BLOB l’unità di misura sono i byte.

L’uso di un prefisso può rendere l’indice molto più piccolo in termini di spazio su disco. Se la parte indicizzata è differenze per quasi tutti i record (esempio: i primi 5 caratteri del cognome), l’uso del prefisso dovrebbe rallentare le ricerche in maniera irrisoria.

L’indice può anche essere unico, nel qual caso non saranno più accettati valori ripetuti nei campi indicizzati (eccetto naturalmente il caso del non-valore NULL). Un indice unico è molto più performante.

1CREATE UNIQUE INDEX nominativo ON clienti (nome, cognome);

Per creare un indice FULLTEXT (solo tabelle MyISAM / Maria):

1CREATE FULLTEXT INDEX nome_indice ON nome_tabella (lista_campi);

Se si indicizza un campo di tipo geometrico, è possibile (ma non obbligatorio) creare un indice spaziale (solo tabelle MyISAM / Maria e non ammette valori NULL):

1CREATE SPATIAL INDEX nome_indice ON nome_tabella (lista_campi);

Indine è possibile specificare quale struttura di dati debba essere usata per l’indice. Al momento MySQL supporta tre tipi di indice: HASH, BTREE e RTREE. Ogni storage engine può supportare uno o più tipi, perciò occorre accertarsi che il tipo di indice desiderato sia supportato dallo storage engine che si sta usando. BTREE è generalmente più performante di HASH. RTREE è ammesso solo per gli indici spaziali, quindi solo nelle tabelle MyISAM.

MyISAM e Maria supportano BTREE e RTREE, InnoDB supporta solo BTREE, MEMORY supporta HASH e BTREE.

Per specificare la struttura di dati da usare:

1CREATE INDEX nome_indice ON nome_tabella (lista_campi) USING tipo;

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve, dopo tante storie ho studiato il php e mysql .. . che in questo forum parlavo php e campo mysql timestamp di gigi Vai al topic

ciao a tutti ho creato un forum su aruba ma non so come farlo visualizzare nel mio aruba di albertodiprima Vai al topic

Salve a tutti gente, questo è il mio primo post su questo forum e questo a causa Problema Gravissimo con AutoIncrement di stefanoadsl Vai al topic

Salve! Mi presento, mi chiamo Adriano e sono uno studente di ingegneria informatica Problema Trigger di Xanakro Vai al topic

Ciao a tutti!
Volevo chiedere una informazione.
Ho una query che lanciata la prima Query Eseguita più volte di OltreLeStelle Vai al topic