資料庫 索引

2021-07-22 07:27:46 字數 3922 閱讀 2756

多數資料庫,使用 b 樹(balance tree)的結構來儲存索引。

b 樹,

最上層節點:根節點

最下層節點:葉子節點

兩者之間的節點:中間節點

b 樹,顯著特徵:從根節點,到各個葉子節點的距離都是相等的。如此,檢索任何值時,都經過相同數目的節點。

[sql]view plain

copy

create

index

idx_lname_pinyin 

onemployee(lname_pinyin);  

show index

from

employee\g  

drop

index

idx_lname_pinyin 

onemployee;  

伴隨主鍵的定義而建立的特別索引,被稱為:叢生索引(

clustered index

)乙個表,只有乙個叢生索引。

普通的索引,在葉子節點中儲存的是指向實際表的指標。

而,叢生索引,在葉子節點中儲存的就是實際資料。

叢生索引,

不需要為儲存索引,而使用專用的硬碟空間,節約資源

不需要檢查索引後,再訪問實際的表,提高了效率

建立叢生索引時,需要對錶中資料進行排序,因此,在執行資料插入、更新、刪除等操作時,比普通索引慢。

復合索引

[sql]view plain

copy

create

index

idx_pinyin 

onemployee( lname_pinyin, fname_pinyin);  

show index

from

employee\g  

唯一性索引

使用unique關鍵字,來建立不可重複的索引,稱為:唯一性索引。

對特定列建立唯一性索引,相當於對該列追加了唯一性制約。

建立唯一性索引的時候,如果物件列中,已經含有重複資料,則:建立失敗,報錯。

建立成功後,如果,插入重複資料,則:插入失敗,報錯。

指定多個列,來建立唯一性索引,只要,這些列的組合資料不重複,就可以建立成功。

[sql]view plain

copy

create

unique

index

idx_fname 

onemployee(fname);  

create

unique

index

idx_lname 

onemployee(lname);  

create

unique

index

idx_fullname 

onemployee(lname, fname);  

[sql]view plain

copy

explain 

select

* from

employee 

where

lname_pinyin=

'wang'

\g  

[sql]view plain

copy

create

index

idx_lname_pinyin 

onemployee(lname_pinyin);  

explain select

* from

employee 

where

lname_pinyin=

'wang'

\g  

explain 命令的說明:p100 **

如果,建立索引後,遍歷的次數與建立索引之前,變化不大。

說明,建立索引時,選擇的列名不合理,需要選擇合適的列重建索引。這是分析索引優劣的方法。

追加了索引後,也不能保證在每次檢索時都會使用列索引。

如果, sql 檢索語句編寫不當,就無法使用索引。

1、like 運算子,進行模糊檢索時,只能在前方一致的檢索時,才能使用索引。

以下寫法,索引不會被使用。

[sql]view plain

copy

select

* from

employee 

where

lname_pinyin 

like

'%w%'

;  select

* from

employee 

where

lname_pinyin 

like

'%w'

;  

2、使用 is not null 、 <> 的場合,也不會使用索引。如下:

[sql]view plain

copy

select

* from

employee 

where

lname_pinyin 

isnot

null

;  select

* from

employee 

where

lname_pinyin <> 

'wang'

;  

3、對列使用了運算或者函式的情況下,不會使用索引,如下:

[sql]view plain

copy

select

* from

employee 

where

year

(birth) = 

'1980'

; -- 不使用索引

select

* from

employee 

where

birth >= 

'1980-01-01'

andbirth <= 

'1980-12-31'

; --使用了索引

4、復合索引的第一列,沒有包含在 where 條件語句中,如下:

[sql]view plain

copy

create

index

idx_pinyin 

onemployee(lname_pinyin, fname_pinyin);  

select

* from

employee 

where

lname_pinyin = 

'wang'

andfname_pinyin = 

'xiao'

; --用了索引

select

* from

employee 

where

lname_pinyin = 

'wang'

; --用了索引

select

* from

employee 

where

fname_pinyin = 

'xiao'

; -- 沒有使用索引

select

* from

employee 

where

lname_pinyin = 

'wang'

orfname_pinyin = 

'xiao'

; -- 沒有使用索引

實際開發過程中,需要積極使用 explain 命令,來確認索引的使用情況,及時作相應修改。

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

資料庫索引

索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...