索引的初探(一)

2022-02-14 12:23:59 字數 1821 閱讀 9606

以前聽做dba的朋友說索引能解決資料庫百分之八十的問題,我也開始簡單的寫幾篇關於索引的隨筆,順便來總結一下我理解的索引以及相關的知識,畢竟進步在於總結。

簡介:

索引是資料庫中乙個排序的資料結構,以協助快速查詢、更新資料庫表中資料。我的理解就像是一本書,沒有目錄你也可以正常閱讀,但是想要直接去讀某個章節則需要全書尋找,太耽誤時間了。所以索引就想目錄一樣幫助我們去直接定位文章的章節(資料的位置)。

索引結構:

在sql server中,索引(聚集索引)儲存結構是一樣的,都是b樹。如圖所示:

索引 b 樹中的每一頁稱為乙個索引節點。b 樹的頂端節點稱為根節點。索引中的底層節點稱為葉節點。根節點與葉節點之間的任何索引級別統稱為中間級。在聚集索引中,葉節點包含基礎表的資料頁。根節點和中間級節點包含存有索引行的索引頁。每個索引行包含乙個鍵值和乙個指標,該指標指向 b 樹上的某一中間級頁或葉級索引中的某個資料行。每級索引中的頁均被鏈結在雙向鏈結列表中。

對於資料庫的檢索和查詢而言,當沒有索引的時候就需要在包含表的資料的所有磁碟(資料頁)進行全盤掃瞄,這樣無疑非常消耗時間。通過對索引的根節點和葉子節點的掃瞄大大減少了磁碟io,從而提高了效率。

下面我們通過乙個例子來說明一下:

左圖是沒有加索引的表,讀取大於某個時間段的資料時邏輯讀取(io)了4808次;然後右圖新增了查詢欄位的索引後,銳減為1792次,可見在加入了索引以後改變了對錶資料的檢索和方式大大提高了讀取速度。

建立、刪除和修改索引的語法:

1.建立索引的語法:

create [unique][clustered | nonclustered]  index  index_name 

on [with [index_property [,....n]]

說明:unique: 建立唯一索引。

clustered: 建立聚集索引。

nonclustered: 建立非聚集索引。

index_property: 索引屬性。

2.刪除索引語法:

drop index table_name.index_name[,table_name.index_name]

說明:table_name: 索引所在的表名稱。

index_name : 要刪除的索引名稱。

3.修改索引

alter index

on索引的缺點:

1建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。

2索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。

3當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

總結:
今天我們先從索引的概念和結構原理上來了解了索引的一般機制,以及對資料檢索帶來哪些基本好處,我們知道了索引的一般語法和缺點。作為乙個優化資料庫的工具索引是我們使用資料庫不可或缺的工具,這篇作為開端只是簡單介紹,接下來我將開始對索引進行分類詳述包括:聚集和非聚集,索引的實踐分析以及索引的維護等方面,預計本週完成其中一二。

mysql的索引初探(一)

mysql的索引初探 一 索引的用處 在資料量比較大的情況下索引可以加快資料得查詢速度 索引的缺點 在資料庫中大量的使用索引會影響表的效能,索引也會大量占用儲存空間,構建過多的索引就會對錶的insert update delete操作會降低效率。索引的型別 主鍵索引,唯一索引,普通索引,全文索引,組...

索引初探(二)

在sqlserver中分為兩種索引,一是聚集索引 一是費聚集索引。下面我就分別對兩種索引進行介紹並分析其區別和各自的特點。1.聚集索引 之前看過乙個比方,我覺得非常恰當這裡也用這個例子來說明兩種索引。我們的字典本身就像是乙個聚集索引,我們根據拼音查詢目錄,然後直接可以找到查詢字的頁,而字典正文就是按...

MongoDB初探 細說索引

一 索引操作 索引是為了優化查詢速度而生,mongodb的索引和其他關係型資料庫,比如mysql,oracle等的索引幾乎相同,對於它們的索引優化經驗同樣適用於mongodb。1 建立索引 mongodb中建立索引是通過ensureindex操作完成的。下面測試了在使用索引和不使用索引下的效能差別,...