MySQL 学习笔记(18)— 索引的分类、创建、查看、删除等
1. 索引類型
1.1 唯一索引與非唯一索引
唯一索引( UNIQUE )中的索引值必須唯一,可以確保被索引的數據不會重復,從而實現數據的唯一性約束。
非唯一索引允許被索引的字段存在重復值,僅僅用于提高查詢的性能。
1.2 單列索引與多列索引
單列索引是基于單個字段創建的索引。例如,員工表的主鍵使用 emp_id 字段創建,就是一個單列索引。
多列索引是基于多個字段創建的索引,也叫復合索引。創建多列索引的時候需要注意字段的順序,查詢條件中最常出現的字段放在最前面,這樣可以最大限度地利用索引優化查詢的性能。
1.3 全文索引與函數索引
全文索引(Full-text),用于支持全文搜索,類似于 Google 和百度這種搜索引擎。
函數索引,基于函數或者表達式的值創建的索引。例如,員工的 email 不區分大小寫并且唯一,可以基于 UPPER(email) 創建一個唯一的函數索引。
2. 創建索引
使用 CREATE INDEX 語句創建索引,默認情況下創建的是 B+ 樹索引:
CREATE [UNIQUE] INDEX index_name
ON table_name(col1 [ASC | DESC], ...);
其中, UNIQUE 表示創建唯一索引; ASC 表示索引按照升序排列, DESC 表示索引按照降序排列,默認為 ASC 。以下語句為表 emp_devp 的員工姓名字段創建一個普通索引:
CREATE INDEX idx_emp_devp_name ON emp_devp(emp_name);
定義主鍵和唯一約束時,數據庫自動創建相應的索引。 MySQL InnoDB 存儲引擎也會自動為外鍵約束創建索引。
3. 查看索引
MySQL 提供了 SHOW INDEXES 命令查看表的索引:
其中 PRIMARY 是系統自動為主鍵創建的索引。
4. 刪除索引
DROP INDEX 語句用于刪除一個索引:
-- Oracle 和 PostgreSQL 實現
DROP INDEX idx_emp_devp_name;
對于 MySQL 和 SQL Server 而言,刪除索引時需要指定表名:
-- MySQL 和 SQL Server 實現
DROP INDEX idx_emp_devp_name ON emp_devp;
5. 索引缺點
既然索引可以優化查詢的性能,那么我們是不是應該將所有字段都進行索引?顯然并非如此,因為索引在提高查詢速度的同時也需要付出一定的代價。
首先,索引需要占用磁盤空間。索引獨立于數據而存在,過多的索引會導致占用大量的空間,甚至超過數據文件的大小。
其次,對數據進行 DML 操作時,同時也需要對索引進行維護;維護索引有時候比修改數據更加耗時。
總結
以上是生活随笔為你收集整理的MySQL 学习笔记(18)— 索引的分类、创建、查看、删除等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌镇外地车限行吗
- 下一篇: MySQL 学习资料汇总