1. 程式人生 > >【MySQL】MySQL的索引

【MySQL】MySQL的索引

約束 記錄 col 因此 訪問 除了 color 要求 rst

索引是存放在模式中的一個數據庫對象,雖然索引總是從屬於數據表,但它也和數據表一樣屬於數據庫對象。創建索引的唯一作用就是加速對表的查詢,索引通過使用快速路徑訪問方法來快速定位數據,從而減少了磁盤的I/O。

MySQL使用information_schema數據庫裏的STATISTICS來保存該數據庫實例中的所有索引信息,用戶可通過查詢該表來獲取該數據庫的索引信息。

創建索引有兩種方式:

1.自動:當表上的定義主鍵約束,外鍵約束和唯一鍵約束的時候,系統會自動創建該數據列的索引。

2.手動:用戶可以通過create index...語句來創建索引。

索引的作用類似於書的目錄,幾乎沒有一本書沒有目錄,因此幾乎沒有一個表沒有索引。一個表中可以有多個索引列,每個索引列都用於加速該列的查詢速度。

創建索引的語法:

create index index_name on table_name(column[,column]...);

下面的索引將會提高對employee表基於last_name字段的查詢

create index emp_last_name_idx on employee(last_name);

也可同時對多列建立索引,

create index emp_last_name_idx2 on employee(first_name,last_name);

MySQL刪除索引需要指定表:

drop index 索引名 on 表名

如下SQL語句刪除了employee表上的emp_last_name_idx2索引

drop index emp_last_name_idx2 on employee

有些數據庫刪除索引時無需指定表名,因為他們要求建立索引時,每個索引都要有自己的名字,所以無需指定表名,列如Oracle就采用這種策略。但MySQL只要求同一個表內的索引不能同名,所以刪除索引時必須指定表名。

索引有好處,當然也有壞處,索引的缺點:

1.與書的目錄類似,當數據表中的記錄被添加、刪除、修改時,數據庫需要維護索引,因此有一定的開銷。

2.存儲索引信息需要一定的磁盤空間。

【MySQL】MySQL的索引