在這裡我來總結一下資料庫索引相關的知識,和大家來分享一下,主要從一下幾個方面來了解資料庫的索引:
一、什麼是資料庫索引?
首先顧名思義,線索、指引;生活中也有很多索引,書的索引、商場裡的索引等等。書的索引就是書的目錄,xx-yy頁是什麼內容;商場的索引是1樓化妝品,2樓**,3樓**......它們都是為了方便我們快速的定位到我們的目標而存在的。那麼什麼是資料庫的索引呢?總結維基百科給出的定義是這樣的:用以協助快速查詢(排序)、更新資料庫表中資料的一種儲存結構(資料結構);度娘百科上是這樣寫的:它是一種對資料庫表中一列或多列的值進行排序的一種儲存結構。
二、作用
1、快速取資料;
2、保證資料記錄的唯一性;
3、實現表與表之間的參照完整性;
4、在使用order by、group by子句進行資料檢索時,利用索引可以減少排序和分組的時間
三、優缺點
1、優點:
①大大提高檢索資料的速度
②唯一索引,能保證資料的唯一性
③外來鍵的列加上索引能加速表連線
④顯著的減少排序和分組的時間
2、缺點:
①、索引會佔物理記憶體
②、新增、修改、刪除的列有索引的話需要動態維護,從而影響操作表的效率
四、索引型別
四種索引:普通索引、
唯一索引
、主鍵索引和
聚集索引
。
1、
普通索引
這是最基本的索引型別,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式建立:
①建立索引: create index 索引名 on 表名(列名1,列名2,...);
②修改表: alter table 表名add index 索引名 (列名1,列名2,...);
③建立表時指定索引:create table 表名 ( [...], index 索引名 (列名1,列名 2,...) );
2、unique索引
表示唯一的,不允許重複的索引,如果該欄位資訊保證不會重複例如身份證號用作索引時,可設定為unique:
①建立索引:create unique index 索引名 on 表名(列的列表);
②修改表:alter table 表名add unique 索引名 (列的列表);
③建立表時指定索引:create table 表名( [...], unique 索引名 (列的列表) );
3、主鍵:primary key索引
主鍵是一種唯一性索引,但它必須指定為「primary key」。
①主鍵一般在建立表的時候指定:「create table 表名( [...], primary key (列的列表) ); 」。
②我們也可以通過修改表的方式加入主鍵:「alter table 表名add primary key (列的列表); 」。
每個表只能有乙個主鍵。 (主鍵相當於聚合索引,是查詢最快的索引)
注:不能用create index語句建立primary key索引
4、聚集索引
索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。聚集索引更適用於對很少對基表進行增刪改操作的情況。
五、索引的操作
1、alter table - 用來建立
普通索引
、unique索引
或primary keys索引
①alter table table_name add index index_name (column_list);
②alter table table_name add unique index_name (column_list);
③alter table table_name add primary keys (column_name);
2、create table -
可對表增加普通索引或unique索引
①create index index_name on table_name (column_list);
②create_unique index_name on table_name (column_list);
3、刪除索引
①drop index index_name on table_name;
②alter table table_name drop idnex index_name;
③alter table table_name drop primary key;
注:其中,前兩條語句是等價的,刪除掉table_name中的索引index_name。
第3條語句只在刪除primary key索引時使用,
因為乙個表只可能有乙個primary key索引,因此不需要指定索引名
。如果沒有建立primary key索引,但表具有乙個或多個unique索引,則mysql將刪除第乙個unique索引。
六、索引選擇原則和注意事項
1、經常出現在
where
語句或join
語句中的字段適合加索引
2、資料較
多的表適合加索引
3、唯一性太差的字段不適合單獨建立索引,即使頻繁作為查詢條件
4、更新操作不是很頻繁的字段適合加索引
5、使用短索引,如果對字串字段設定索引應指定字首長度,可節省大量索引空間,提公升查詢速度
6、where語句中是or的關係的,索引不起作用(可以考慮用union代替)
7、聯合索引(又叫復合索引,兩個或更多個列上的索引
)。對於復合索引mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是index idx_name (a,b,c). 可以支援a|
a,b|
a,b,c
3種組合進行查詢,但不支援 b,c進行查詢 ,所以常用來當查詢條件的字段應盡量靠左,使用頻率相對低的靠右;比如乙個查詢有兩個條件:where a=1 and b=2,如果我們為a、b兩個字段分別建立索引,由於mysql一次只能使用乙個索引,所以我們加兩個還有乙個沒有用,這種情況就應該
為這兩個字段建立聯合索引
,那這個查詢的效率才算是得到了最大程度的提高
8、
索引不會包含有null值的列,
復合索引中只要有
一列含有
null值
,那麼這一列對於此復合索引就是
無效的。所以我們在資料庫設計時
不要讓字段的預設值為null
8、查詢中排序的字段適合加索引,沒有條件只有排序的情況,只給排序的字段加索引即可;若是有where條件加排序的情況,應該為條件和排序的字段建立聯合索引
9、分組或統計的字段適合加索引,即經常用來分組或求和的字段
10、like語句中,column_name like '%***%'不會使用索引,但like '***%'會使用,所以盡量少用like '%***%'查詢
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
資料庫索引
索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...