English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL 创建索引(CREATE INDEX 语句)

在本教程中,您将学习如何在表上创建索引以提高数据库性能。

什么是索引?

索引是与表相关联的数据结构,它基于一个或多个列(索引键)中的值提供对表中行的快速访问。

假设您的数据库中有一个customers假设您的数据库中有一个表,并且您想使用以下语句找出名字是以字母A开头的所有客户。

SELECT cust_id, cust_name, address FROM customers 
WHERE cust_name LIKE 'A%';

Per trovare tali clienti, il server deve esserecustomersScansionare ogni riga della tabella e controllare il contenuto della colonna dei nomi. Anche se funziona bene per tabelle con poche righe, immagina di avere una tabella con un milione di righe; potrebbe voler molto tempo per rispondere alla query. In questo caso, puoi accelerare il processo applicando un indice alla tabella.

Creare un indice

Puoi creare un indice utilizzando la seguente dichiarazione CREATE INDEX:

CREATE INDEX index_name ON table_name (column_name);

Ad esempio, per creare un indice su una colonna nella tabella clientinamePer creare un indice su una colonna, puoi usare:

CREATE INDEX cust_name_idx ON customers (cust_name);

Per impostazione predefinita, l'indice consente la duplicazione degli elementi e li ordina in ordine crescente. Per richiedere elementi unici dell'indice, aggiungi la parola chiave UNIQUE dopo CREATE, come mostrato di seguito:

CREATE UNIQUE INDEX cust_name_idx 
ON customers (cust_name);

In MySQL, puoi vedere gli indici disponibili su una tabella specifica, come mostrato di seguito:

mysql> SHOW INDEXES FROM customers \G

Suggerimento:Usa \G al posto del punto e virgola (;) per terminare la dichiarazione SQL. Se i risultati sono troppo larghi per la finestra corrente, vengono visualizzati in modo verticale invece che in formato tabella regolare.

Creare un indice multi-colonna

Puoi anche creare indici su più colonne. Ad esempio, supponiamo che tu abbia già chiamato la tabella nel databasedegli utenticon le colonnefirst_nameelast_nameE se spesso accedi a questi campi, puoi creare un indice su due colonne insieme per migliorare le prestazioni delle registrazioni degli utenti, come mostrato nella figura seguente:

CREATE INDEX user_name_idx ON users (first_name, last_name);

Suggerimento:Puoi considerare l'indice del database come la parte dell'indice di un libro, che ti aiuta a trovare o localizzare rapidamente argomenti specifici nel libro.

I difetti degli indici

Gli indici devono essere creati con cautela. Poiché ogni volta che si aggiunge, aggiorna o elimina una riga nella tabella, devono essere modificati tutti gli indici sulla tabella. Pertanto, più indici si hanno, più lavoro deve fare il server, il che può portare alla riduzione delle prestazioni.

Ecco alcune regole di base da seguire quando si creano indici:

  • Creare indici per le colonne spesso utilizzate per cercare dati.

  • Non creare indici per le colonne mai utilizzate come chiave di ricerca.

  • Colonne di indici utilizzate per migliorare le prestazioni della connessione.

  • Evitare di includere colonne con troppi valori NULL.

Anche, la tabella piccola non ha bisogno di indici, perché nel caso delle tabelle piccole, la scansione del server della tabella è generalmente più veloce rispetto al visualizzare prima l'indice.

Attenzione:Quando si crea una tabella, la maggior parte dei sistemi di database (come MySQL, SQL Server, ecc.) crea automaticamente indici per la tabellaPRIMARY KEYeUNIQUECrea un indice sulla colonna.

Elimina l'indice

Puoi utilizzare le seguenti istruzioni per eliminare gli indici non necessari.

DROP INDEX index_name ON table_name;

Le seguenti istruzioni_eliminerannocustomersElimina l'indice della tabellacust_name_idx.

DROP INDEX cust_name_idx ON customers;

Inoltre, seElimina la tabella,Quindi verranno eliminati anche tutti gli indici correlati.

Attenzione:Prima di eliminare l'indice, dovresti verificare l'impatto che l'eliminazione dell'indice potrebbe avere. Come regola generale, evita di creare o eliminare indici in modo sconsiderato.