SQL - 建立索引



索引是快速檢索 SQL 資料庫中資料的有效方法。它是一個數據庫物件,引用儲存在表中的資料,從而顯著提高資料庫的查詢和應用程式效能。

SQL 中的索引過程類似於書籍中的索引:它是一種表形式的資料庫物件,包含資料位置的詳細資訊,並擁有單獨的儲存空間。

儘管索引有助於加快搜索查詢速度,但使用者無法直接看到這些索引的執行情況。

什麼是 SQL 索引?

SQL 索引是一個特殊的查詢表,有助於有效地搜尋或查詢資料庫表以檢索所需資料。例如,當我們嘗試使用連線從多個表檢索資料時,索引可以提高查詢效能。

隨著資料量的增長,索引用於最佳化任何關係資料庫管理系統 (RDBMS) 的查詢效能。因此,建議將其用於頻繁查詢的大型資料庫表。

建立 SQL 索引

可以使用CREATE INDEX語句在 SQL 資料庫中表的單個或多個列上建立索引。

語法

以下是 SQL 中CREATE INDEX語句的語法:

CREATE INDEX index_name 
ON table_name (column_name1, column_name2,... column_nameN);

這裡:

  • index_name 指定要建立的索引的名稱。
  • table_name 指定要建立索引的表的名稱。
  • (column_name1, column_name2...column_nameN) 是正在建立索引的一個或多個列的名稱。

示例

要在資料庫表上建立索引,我們首先需要建立一個表。因此,在此示例中,我們使用以下查詢建立一個名為CUSTOMERS的表:

CREATE TABLE CUSTOMERS(
   ID INT NOT NULL,
   NAME VARCHAR(15) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS VARCHAR(25),
   SALARY DECIMAL(10, 4),
   PRIMARY KEY(ID));
);

然後,使用以下查詢將一些值插入 CUSTOMERS 表中:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'Kaushik', '23', 'Kota', 2000),
(4, 'Chaitali', '25', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'Hyderabad', 9000),
(7, 'Muffy', '24', 'Indore', 5500);

建立表後,使用以下查詢為 CUSTOMERS 表中名為NAME的列建立索引:

CREATE INDEX index_name ON CUSTOMERS(NAME);

輸出

執行上述查詢後,將獲得如下輸出:

Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

驗證

以下 SHOW INDEX 查詢用於顯示在現有表上建立的所有索引。

SHOW INDEX FROM CUSTOMERS;

在獲得的列表中,您可以找到列名 NAME,以及索引列表中的 ID。

非唯一 鍵名 索引中的序列 列名
客戶 0 主鍵 1 ID
客戶 1 index_name 1 NAME

在多個欄位上建立索引

我們還可以使用 CREATE INDEX 語句在表的多個欄位(或列)上建立索引。為此,您只需要傳遞要建立索引的列的名稱。

示例

讓我們考慮前面建立的 CUSTOMERS 表,而不是建立一個新表。在這裡,我們使用以下查詢在NAMEAGE列上建立索引:

CREATE INDEX mult_index_data on CUSTOMERS(NAME, AGE);

輸出

執行上述查詢後,將獲得如下輸出:

Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

驗證

現在,讓我們使用以下 SHOW INDEX 查詢列出在 CUSTOMERS 表上建立的所有索引:

SHOW INDEX FROM CUSTOMERS;

正如您所看到的,您可以在索引列表中找到列名 NAME 和 AGE 以及 ID(主鍵)。

非唯一 鍵名 索引中的序列 列名
客戶 0 主鍵 1 ID
客戶 1 index_name 1 NAME
客戶 1 mult_index_data 1 NAME
客戶 1 mult_index_data 2 AGE
廣告