【MySQL】MySQL的索引
阿新 • • 發佈:2018-03-14
約束 記錄 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的索引