資料庫什麼時候建立索引合適呢??

2022-08-27 07:12:11 字數 2030 閱讀 5137

嗯??聽到這個問題的時候,是不是有些茫然?

我連什麼是索引都不是很清晰明了,你給我講什麼建立索引的時機?!!!

是的,很多同學只是有所耳聞,並且可能就是只知道索引可以優化sql效率,但是至於其所以然並不清晰。那麼我們現在先談談什麼是索引。

對於mysql而言,官方對索引給出的定義是:索引(index)是幫助mysql高效獲取資料的資料結構。

這個時候,我們可以了解到索引就是一種資料結構。

也可以通俗的理解:一種排好序等你來直接查詢的快速查詢的資料結構。所以上面也說道了可以優化sql的查詢效率。

那麼索引到底如何實現的呢?這裡我們簡單的說一下:

用mysql舉例來說明,mysql支援多種儲存引擎,那麼各種儲存引擎支援的索引也是不一樣的。這裡我們說到的mysql就支援多種:**b-、b+tree;hash;全文。

這裡我們重點說一下:聚簇索引和非聚簇索引。(很多場景經常問)

在mysql的儲存引擎中:myisam和innodb,其中分別實現的是非聚簇索引和聚簇索引。

對於兩種索引結構來說:

聚簇索引:聚餐索引就是資料的物理儲存順序,通俗的講,就是排隊,比如一排人坐在位置上,我要他們全起立,按照你們個個座位的序號,給我排好隊。這樣,我叫第三個人出列,就可以直接找到了。

非聚簇索引:索引順序與資料物理排序順序無關。通俗的講,就是你們雖然按序號坐著,但是我手上有乙份名單,這名單的順序是按照姓名的a-z排序的。那麼我叫第三個人出列,就可以直接看到這個人的唯一姓名了。

那麼對於上面兩種儲存引擎,適用於什麼場景呢。通常來說,非聚簇索引適合大量的讀操作。聚簇索引適用於大量的增刪改操作。

好,簡單的索引拓展結束,我們重點說說使用索引。

建立索引的好處

那麼建立索引有什麼好處嗎?這麼講,我們在圖書館找書的時候,是不是按照書標籤去找書的,這樣,即使在幾百萬的藏書中,我們也能找到自己要的書籍。這樣在系統層面,我們降低了資料庫的io操作。通過索引,我們也不需要排序,直接就降低了排序的效能消耗。

那麼壞處呢?

那麼萬物皆有雙面性,在我們建立索引的同時,也就是說,我們還要對索引進行維護,也就是說,需要維護兩套資料。且在對比哦庫表進行增刪改操作的時候,還需要對索引進行乙個更新資訊操作。從底層實現來說,索引也是一張庫表,其中的資料內容就是表結構對應的索引字段,所以說索引也消耗了一定的儲存空間。類似一種觸發器機制。

那麼說其弊端也顯而易見了,就是維護的成本,和io讀寫。

總結來說,就是索引適合在高頻的讀操作中建立,且不適合高頻的增刪改操作。

那麼最後面我們可以直接對索引進行乙個使用的總結了。

在哪些場景適合使用索引呢?

1.在我們建立表的時候,其實預設已經將主鍵上建立唯一索引了。

2.當某個字段頻繁的作為查詢引數,查詢條件的字段也建議使用,比如號碼,唯一,且查詢頻率高

3.當我使用join進行乙個鍊錶查詢,就適合使用,這樣,外來鍵也是一種查詢條件頻率高。

4.排序的字段,當我們對一些資料量較大的表進行乙個查詢且排序,例如日誌表,都會使用到建立時間作為排序字段,並且來說,這些表的資料量都不小,這個時候,我們建立索引會有明顯的效率提公升。

5.還有我們做統計資料的時候,通常會對該字段進行一種資料的匯**計,在分組查詢的時候也是一樣的意思,這個時候,也建議建立索引。

注:在建立索引的時候,組合索引建立比單個更有效果,但是不能貪多哦。

那麼也有一些場景不建議使用索引:

1.表記錄較少,你一共就10條資料,我還建立乙個索引?可能索引的資料儲存都比實際資料都多。

2.還有一種就是上面已經說到的,高頻的增刪改表。比如流水表,秒級的增加資料。這種表結構,我們通常不建議。

3.查詢條件幾乎用不到的字段。這個自己理解。

4.還有就是那種,你選擇他作為查詢條件,但是幾乎沒有條件過濾的感覺的字段。例如,性別,你說你查詢男和女有多大的過濾??

那麼後面,我們肯定得講講儲存引擎中的b樹,這個可是高頻面試題。

資料庫建立索引的缺點,和什麼時候不該建立索引

缺點 第一,建立索引和維護索引要耗費時間,這種時間隨著資料 量的增加而增加。第二,索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。第三,當對表中的資料進行增加 刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。...

究竟什麼時候該建立索引

索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個位置去搜尋到資料檔案的中間,沒有必要看所有資料。大多數mysql索引 primary key unique ...

MySql中什麼時候建立索引?

索引 index 是幫助mysql高效獲取資料的資料結構。所以說索引的本質是 資料結構。簡單理解就是 排好序的快速查詢資料的資料結構。一般來說,索引本身也很大,不可能全部儲存在記憶體中,所以通常以索引檔案的形式儲存在磁碟上。高效的檢索資料 通過索引列隊資料排序 更新表 增 刪 改 的同時也需要更新索...