目次
1. MySQL 的索引是什麼:提升資料庫效能的關鍵
在 MySQL 資料庫中有效使用索引,可大幅提升查詢效能。索引是針對資料庫中特定欄位(欄)所產生的資料結構,負責提升搜尋與過濾的速度。例如,從大量資料中抽取特定資訊時,使用索引可省略全資料的掃描,只搜尋索引內指定的欄位。索引的角色與類型
MySQL 的索引有以下類型。- PRIMARY(主鍵):每個資料表只能有一個的唯一鍵,作為資料表的主要識別子使用。
- UNIQUE 索引:保持唯一性的索引,防止在指定欄位插入重複的值。
- 一般索引:沒有唯一性限制,用於提升特定欄位的搜尋效率的索引。
2. MySQL 檢查索引的基本方法
在 MySQL 中,使用 SHOW INDEX 指令來確認已建立的索引。這是一個簡單的 SQL 指令,會顯示指定資料表內的索引資訊。以下說明具體步驟。SHOW INDEX 的基本語法與輸出內容
SHOW INDEX FROM 資料表名稱;
輸出內容說明
執此指令後,會顯示以下資訊。- Table:索引所在的資料表名稱
- Non_unique:表示索引是否唯一(0)或允許重複(1)
- Key_name:索引的名稱
- Column_name:索引所套用的欄位名稱
- Cardinality:索引中已登錄的唯一值的估計數量,作為顯示搜尋效率的指標。
3. INFORMATION_SCHEMA.STATISTICS 表格的索引檢查
除了 SHOW INDEX 語句之外,MySQL 也提供透過查閱 INFORMATION_SCHEMA.STATISTICS 表格來確認索引的方法。此方式方便列出整個資料庫的索引,且能取得更詳細的資訊。INFORMATION_SCHEMA.STATISTICS 的基本查詢
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '資料庫名稱';
查詢結果的詳細
- TABLE_SCHEMA:索引所屬的資料庫名稱
- TABLE_NAME:索引所在的資料表名稱
- COLUMN_NAME:索引套用的欄位名稱
- INDEX_NAME:索引的名稱
4. 索引的新增與刪除方法及其影響
索引的新增方法
索引可以視需求在之後新增。使用以下指令即可在指定的欄位上建立索引。CREATE INDEX 索引名 ON 資料表名(欄位名);
例如,若要在 users
表的 email
欄位新增索引,請執行以下指令:CREATE INDEX idx_email ON users(email);
索引的刪除方法
刪除不需要的索引,可優化 INSERT 與 UPDATE 操作的效能。刪除時使用 DROP INDEX 指令。DROP INDEX 索引名 ON 資料表名;
不需要的索引例子包括未在搜尋條件(WHERE 子句)中使用的欄位所設定的索引等。刪除索引可提升資料的插入與更新速度。
5. 使用 EXPLAIN 語句檢查索引效能
MySQL 的EXPLAIN語句可用於確認查詢執行計畫,並調查哪些索引被套用。藉此可評估索引的有效性,並在需要時進行最佳化。EXPLAIN 語句的基本用法
EXPLAIN SELECT * FROM 表名 WHERE 欄位名 = '條件';
使用此指令即可確認索引是否被使用,或是否執行全表掃描。結果會包含以下項目:- type:查詢的類型(ALL 表示全表掃描,INDEX 表示使用索引)
- possible_keys:可用於此查詢的索引清單
- key:實際使用的索引名稱
- rows:預估被掃描的行數