索引的原理

2021-08-20 08:40:20 字數 2031 閱讀 6042

面試題目:索引的原理及分類? 簡單了解一下。

索引的原理:

索引類似於書的目錄,當表中的資料量很大時,索引可以提高資料的檢索速度。

沒有建立索引時,查詢name=」tom」需要將表中的記錄全部搜尋一遍,因為可能有重名的。

而建立了索引之後,索引會對每個name的值構建索引條目(name,rowid),儲存到索引段中,查詢時直接找到name為tom即可直接找到目的地。索引只是用於優化where後面的條件查詢。

但建立索引時會佔據許多磁碟空間;

更新資料的時候,系統必須要有額外的時間來同時對索引進行更新,以維持資料和索引的一致性;

建立索引時要在 提公升檢索速度 與 降低更新速度 之間平衡。

索引的使用(建立、修改、刪除、檢視):

1.建立索引

create [unique]index index_name    ----unique 唯一索引

on table_name(column1 [asc|desc], column2 [asc|desc]...)

2.修改索引

alter table table_name

add [unique] index index_name(column1 [asc|desc],...)

3.刪除索引

drop index index_name on table_name
4.檢視索引是否建立成功

show

create

table table_name \g

oracle索引的分類:

1.b樹索引(oracle預設使用)

b樹索引就是一棵二叉樹,葉節點包含索引列和指向表中每個匹配行的rowid值。

列不重複值大時適合使用b樹索引。

2.點陣圖索引

建立位圖索引時,oracle會掃瞄整張表,並為索引列的每個取值建立乙個位圖(點陣圖中,對錶中每一行 使用一位(bit,0或者1)來標識該行是否包含該位圖的索引列的取值,如果為1,表示對應的rowid所在的記錄包含該位圖索引列值),最後通過位圖索引中的對映函式完成位到行的rowid的轉換.

對於基數小的列適合簡歷位圖索引(例如性別等)

create bitmap index index_sno on student(sno);
3.單列索引和復合索引(基於多個列建立)

1) 注意:

即如果索引建立在多個列上,只有它的第乙個列被where子句引用時,優化器才會使用該索引,即至少要包含組合索引的第一列;

4.函式索引

1) 當經常要訪問一些函式或者表示式時,可以將其儲存在索引中,這樣下次訪問時,該值已經計算出來了,可以加快查詢速度

2) 函式索引既可以使用b數索引,也可以使用位圖索引;當函式結果不確定時採用b樹索引,結果是固定的某幾個值時使用位圖索引

create index fbi  on student (upper(name));

select * from student where upper(name) ='wish';

如果有兩個或者以上的索引,其中有乙個唯一性索引,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引

至少要包含組合索引的第一列(即如果索引建立在多個列上,只有它的第乙個列被where子句引用時,優化器才會使用該索引)

小表不要簡歷索引

對於基數大的列適合建立b樹索引,對於基數小的列適合簡歷位圖索引

列中有很多空值,但經常查詢該列上非空記錄時應該建立索引

經常進行連線查詢的列應該建立索引

使用create index時要將最常查詢的列放在最前面

long(可變長字串資料,最長2g)和long raw(可變長二進位制資料,最長2g)列不能建立索引

限制表中索引的數量(建立索引耗費時間,並且隨資料量的增大而增大;索引會占用物理空間;當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度)

sql優化:

MySQL索引原理之索引原理

索引定義 是儲存引擎用於快速查詢記錄的一種資料結構。需要額外開闢空間和資料維護工作。索引是物理資料頁儲存,在資料檔案中 innodb,ibd檔案 利用資料頁 page 儲存。索引可以加快檢索速度,但是同時也會降低增刪改操作速度,索引維護需要代價。索引涉及的理論知識 二分查詢法 hash和b tree...

MySQL索引的原理

回想四年前,我在學習mysql的索引這塊的時候,老師在講索引的時候,是像下面這麼說的 索引就像一本書的目錄。而當使用者通過索引查詢資料時,就好比使用者通過目錄查詢某章節的某個知識點。這樣就幫助使用者有效地提高了查詢速度。所以,使用索引可以有效地提高資料庫系統的整體效能。嗯,這麼說其實也對。但是呢,大...

MySQL Innodb 索引的原理

回想四年前,我在學習mysql的索引這塊的時候,老師在講索引的時候,是像下面這麼說的 索引就像一本書的目錄。而當使用者通過索引查詢資料時,就好比使用者通過目錄查詢某章節的某個知識點。這樣就幫助使用者有效地提高了查詢速度。所以,使用索引可以有效地提高資料庫系統的整體效能。嗯,這麼說其實也對。但是呢,大...