mysql中索引

一、概述

1、What?

 索引是對數據庫表中一列或多列的值進行排序的的一種結構,可以提高數據庫中特定的數據查詢速度。

 索引時一個單獨存儲在磁盤上的數據庫結構,包括對數據表裏面的所有記錄的引用指針。

 索引時在存儲引擎中實現的,每種存儲引擎的索引都不一定相同,也不一定支持所有索引類型,msyql中索引存儲類型有兩種:btree、hash,具體和表的存儲引擎相關的:myisam、InnoDB。

2、Why?

 優點:

 1.通過創建唯一索引,可以保證數據庫表中的每行數據的唯一性,提高數據的查詢速度;

 2.加快數據庫表語表之間的的連接;

 3.使用分組和排序子句進行數據查詢時,減少查詢中分組和排序的時間。

 缺點:

 1.創建索引和維護索引要耗費時間,隨着數據量的增加所耗費的的時間也增加;

 2.索引需要佔磁盤空間,每一個索引佔一定的物理空間,如果有大量索引,索引文件可能比數據文件更快達到最大文件尺寸;

 3.對錶中的數據進行增加、刪除、修改時,索引需要動態維護,降低數據的維護速度。

二、索引分類


1.創建普通索引與單例索引,使用idnex關鍵字

alter table 表名 add index 索引名(表中索引的字段名);
alter table t_user add index user_name(t_name);
2.創建唯一索引,使用unique關鍵字

alter table 表名 add unique 索引名(表中索引的字段名);
alter table t_user add unique user_id(t_id);
3.創建組合索引,使用index關鍵字
alter table 表名 add index 索引名(字段1,t_字段2);
alter table t_user add index list_count(t_password,t_regtime);
4.創建全文索引,使用fulltext關鍵字

alter table 表名 add fulltext 索引名(表中要索引的字段名);
注:由於fulltext創建全文索引只要MyISAM存儲支持,需要更改mysql存儲引擎。全文索引適合大型數據集。

5.創建空間索引,使用spatidx關鍵字

alter table 表名 add spatidx 索引名(表中要索引的字段名);
注:由於spatidx創建全文索引只要MyISAM存儲支持,需要更改mysql存儲引擎。

三、索引操作

1.查詢索引

例1:

show index from t_user;

Non_unique:索引唯一性,1表示非唯一,0表示唯一索引;

Key_naem:索引名稱;

Seq_in_index:字段在索引中的位置,單列索引該值爲1,組合索引爲每個字段在索引中的順序;

Column_name:定義索引的列字段;

Sub_part:索引長度;

Null:表示該字段是否能爲空值;

Index_type:表示索引類型;

例2:

show create table t_user;

例3:

explain select * from t_user;

2.刪除索引

使用alter table語句刪除索引:

alter table 表名 drop index 索引名稱;

使用drop index語句刪除索引:

drop index 索引名稱 on 表名;

四、索引設計原則

1.避免對經常更新的表進行過多的索引,索引中列儘量可能少,對於經常查詢的字段應該創建索引;

2.數據量小的表最好不要用索引;

3.索引不是越多越好,表中如有大量的索引,不僅佔用磁盤空間,也會影響instead、delete、update語句性能,因爲表中的數據更改的同時,索引也會進行調整和更新。

4.數據本身具有唯一性特徵時,指定唯一索引,使用唯一索引確保定義的列的數據完整性,以提高查詢速度;

5、頻繁進行排序和分組的列上創建索引,如果待排序的列上有多個,可在這些列上建立組合索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章