什麼是索引

在資料庫中,從表格特定欄位的值快速找出具有該值之資料列位置的資料結構。常使用B+樹。能讓搜尋變快,但每次新增、修改、刪除資料列時都需要維護,也會占用儲存容量。

日文名稱: インデックス

「索引」出現在1領域的4道練習題中(資料庫基礎等)。

這個名詞所屬的領域: 資料庫基礎

B+樹索引的運作方式

關聯式資料庫的索引常使用B+樹。B+樹是分支很多、從根到每個葉節點層數都相同的樹狀結構,葉節點依值的順序保存欄位的值與資料列的位置,葉節點之間也依序相連。若每個節點分出100個分支,3層就能區分100萬筆,因此即使是100萬筆資料列的表格,也只要讀取幾次就能找到目標資料列。由於葉節點依值的順序相連,不只能用於以 = 搜尋,也能用於BETWEEN之類的範圍搜尋與ORDER BY的排序。

索引有效與無效的情況

索引在選擇性高、條件能把資料列縮小到整體極小一部分的欄位上能發揮效果。像會員編號這樣值全部不同的欄位最為理想,但在像性別這樣只有2種值的欄位上,約有一半的資料列符合,從頭依序讀取表格的全表掃描,往往比透過索引逐筆取出更快。此外,對欄位套用函數的條件,或像 LIKE '%華' 這樣的後方比對條件,一般的索引有時無法使用。

寫入的代價

索引是與表格分開維護的資料結構。每次新增、修改、刪除資料列時,所有相關的索引也都必須修改,因此索引越多,寫入越慢,儲存容量也越大。因此基本做法是選擇經常作為搜尋或連結條件的欄位建立索引,並刪除未使用的索引。許多DBMS會自動為主鍵與UNIQUE限制的欄位建立索引。

練習索引的題目

在有100萬筆資料列的會員表格之會員編號欄位上建立了B+樹索引。一般可預期的效果與代價組合,下列何者正確?

  1. AWHERE 會員編號 = 12345 這類搜尋變快,但每次新增或更新資料列時也要更新索引,因此寫入變慢
  2. B所有欄位的搜尋都變快,而且沒有代價
  3. C表格的資料列會依會員編號排序,因此任何搜尋都變快,而且儲存容量減半
查看答案與解析

正確答案:A. WHERE 會員編號 = 12345 這類搜尋變快,但每次新增或更新資料列時也要更新索引,因此寫入變慢

索引是從表格特定欄位的值,快速找出具有該值之資料列位置的資料結構,關聯式資料庫常使用B+樹。若沒有索引,要找出 WHERE 會員編號 = 12345 的資料列,就必須依序檢查100萬筆資料列(全表掃描),而使用B+樹只要從根到葉沿著幾層就能找到。例如每個節點分出100個分支,因為 100 × 100 × 100 = 100萬,大約3層即可。B+樹的葉節點依值的順序相連,因此也能用於BETWEEN之類的範圍搜尋與ORDER BY的排序。另一方面,每次新增、更新、刪除資料列時也必須更新索引,因此寫入會變慢,也需要索引所占的儲存容量。在未建立索引的欄位上搜尋不會變快。

在有100萬筆資料列的日本會員表格中,考慮分別在會員編號(全部不同)、都道府縣(47種)、性別(2種,大約各半)欄位上建立B+樹索引。在WHERE子句中指定一個欄位的值進行搜尋時,索引效果可能最小的是哪個欄位?

  1. A都道府縣
  2. B性別
  3. C會員編號
查看答案與解析

正確答案:B. 性別

索引能發揮效果,是在符合條件的資料列被縮小到整體極小一部分的時候。會員編號全部不同,符合條件的只有1筆,可透過索引直接找到。都道府縣有47種,若平均分布,一個值大約可縮小到 100萬 ÷ 47 ≒ 2萬1千筆(整體的約2%)。性別有2種且大約各半,無論指定哪個值都有約50萬筆(約50%)符合。透過索引逐筆取出這麼多資料列,往往比從頭依序讀取表格的全表掃描更慢,因此DBMS的最佳化器可能選擇不使用索引的執行方式。像這樣,值的種類越多、能以條件縮小資料列的程度(選擇性)越高的欄位,索引的效果越大。

常見問題

所有欄位都建立索引比較好嗎?

並不好。索引越多,每次新增或修改資料列時的維護負擔越大,也越占儲存容量。應選擇經常作為搜尋或連結條件、能充分縮小資料列的欄位來建立。

為什麼建立了索引卻沒有被使用?

可能是最佳化器判斷符合條件的資料列太多、全表掃描較快,或是條件無法利用索引的排列順序,例如對欄位套用函數的條件、後方比對的LIKE等。

解析中的「索引」

出現「索引」的題目(4題)

  1. 在有100萬筆資料列的會員表格之會員編號欄位上建立了B+樹索引。一般可預期的效果與代價組合,下列何者正確?
  2. 在有100萬筆資料列的日本會員表格中,考慮分別在會員編號(全部不同)、都道府縣(47種)、性別(2種,大約各半)欄位上建立B+樹索引。在WHERE子句中指定一個欄位的值進行搜尋時,索引效果可能最小的是哪個欄位?
  3. SQL敘述可分為資料定義語言(DDL)、資料操作語言(DML)與資料控制語言(DCL)。屬於DDL的是下列何者?
  4. 關於關聯式資料庫的檢視表,下列敘述何者正確?

相關名詞

關聯式資料庫 檢視表 SQL 交易 主鍵 外鍵 正規化 兩階段鎖定(2PL) 第三正規化(3NF) 隔離等級

前往名詞解釋列表