
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表資料
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 鍵
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - 聚簇索引
資料庫中的索引是一種資料結構,有助於提高從表和檢視中檢索特定資料的速度。
表中的資料以稱為“堆”的無序資料結構的形式儲存,其中行沒有任何特定順序地放置。因此,當從表中檢索資料時,查詢最佳化器必須掃描整個表以找到所需的行。此過程可能非常耗時,尤其是在處理大型表時。為了加快資料檢索速度,SQL 提供了一個稱為索引的資料物件,它以特定方式儲存和組織表資料,從而允許更快地訪問資料。
SQL 聚簇索引
SQL 中的聚簇索引是一種確定資料值在表中物理儲存順序的索引型別。
當在特定列上定義聚簇索引時,在建立新表期間,資料將按排序順序插入該列。由於資料按特定順序儲存,因此這有助於更快地檢索資料。
- 建議表中只有一個聚簇索引。如果我們在同一表上建立多個聚簇索引,則表必須以多種順序儲存相同的資料,這是不可能的。
- 當我們嘗試在表上建立主鍵約束時,會在表上自動建立一個唯一的聚簇索引。但是,聚簇索引與主鍵不同。主鍵是對列或列集施加唯一性的約束,而聚簇索引決定表中資料的物理順序。
MySQL 資料庫沒有為聚簇索引和非聚簇索引提供單獨的規定。當在表上定義 PRIMARY KEY 時,會自動建立聚簇索引。當未定義 PRIMARY KEY 時,第一個 UNIQUE NOT NULL 鍵將被視為聚簇索引。
語法
以下是使用 SQL Server 建立聚簇索引的語法:
CREATE INDEX index_name ON table_name(column_name [asc|desc])
其中,
- index_name:指定要賦予所建立索引的名稱。
- column_name:指定將按指定順序編入索引的列。
- asc|desc:指定資料應排序的順序(asc - 升序,desc - 降序)。預設排序順序為升序。
示例
在這個示例中,讓我們在 SQL Server 中的表上建立一個聚簇索引。為此,我們需要首先使用以下查詢建立一個名為CUSTOMERS的表:
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (20, 2) );
現在,使用以下查詢將一些值插入 CUSTOMERS 表:
INSERT INTO CUSTOMERS VALUES (7, 'Muffy', '24', 'Indore', 5500), (1, 'Ramesh', '32', 'Ahmedabad', 2000), (6, 'Komal', '22', 'Hyderabad', 9000), (2, 'Khilan', '25', 'Delhi', 1500), (4, 'Chaitali', '25', 'Mumbai', 6500), (5, 'Hardik','27', 'Bhopal', 8500), (3, 'Kaushik', '23', 'Kota', 2000);
該表已成功在 SQL Server 資料庫中建立。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
7 | Muffy | 24 | 印多爾 | 5500.00 |
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |
6 | Komal | 22 | 海德拉巴 | 9000.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
4 | Chaitali | 25 | 孟買 | 6500.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
3 | Kaushik | 23 | 科塔 | 2500.00 |
現在,讓我們使用以下查詢在名為ID的列上建立一個聚簇索引:
CREATE CLUSTERED INDEX CLU_ID ON CUSTOMERS(ID ASC);
輸出
執行上述查詢後,將顯示如下輸出:
Commands Completed Successfully.
驗證
要驗證是否在 ID 列上定義了聚簇索引,請使用以下查詢檢索記錄以檢查 CUSTOMERS 表的記錄是否已排序:
SELECT * FROM CUSTOMERS;
該表中的記錄根據名為 ID 的列中的值按升序排序。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | 科塔 | 2500.00 |
4 | Chaitali | 25 | 孟買 | 6500.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
6 | Komal | 22 | 海德拉巴 | 9000.00 |
7 | Muffy | 24 | 印多爾 | 5500.00 |
在多列上建立聚簇索引
透過以下示例,讓我們瞭解在表的多個列上建立聚簇索引的工作原理。
無需建立新表,請考慮先前建立的 CUSTOMERS 表,並使用以下查詢在此表的多個列(例如 AGE 和 SALARY)上定義聚簇索引:
CREATE CLUSTERED INDEX MUL_CLUS_ID ON CUSTOMERS (AGE, SALARY ASC);
輸出
當我們執行上述查詢時,將獲得如下輸出:
Commands Completed Successfully.
驗證
現在,讓我們驗證列AGE和SALARY中的值是否已排序:
SELECT * FROM CUSTOMERS;
正如我們在下表中觀察到的那樣,記錄僅根據 AGE 列中的值排序,而不是根據 SALARY 列中的值排序。因此,建議表中只有一個聚簇索引。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
6 | Komal | 22 | 海德拉巴 | 9000.00 |
3 | Kaushik | 23 | 科塔 | 2500.00 |
7 | Muffy | 24 | 印多爾 | 5500.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
4 | Chaitali | 25 | 孟買 | 6500.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |