資料庫索引

2021-07-27 09:05:29 字數 4903 閱讀 6164

在這裡我來總結一下資料庫索引相關的知識,和大家來分享一下,主要從一下幾個方面來了解資料庫的索引:

一、什麼是資料庫索引?

首先顧名思義,線索、指引;生活中也有很多索引,書的索引、商場裡的索引等等。書的索引就是書的目錄,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 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...