資料庫基礎
在有100萬筆資料列的日本會員表格中,考慮分別在會員編號(全部不同)、都道府縣(47種)、性別(2種,大約各半)欄位上建立B+樹索引。在WHERE子句中指定一個欄位的值進行搜尋時,索引效果可能最小的是哪個欄位?
- A都道府縣
- B性別
- C會員編號
查看答案與解析
正確答案:B. 性別
索引能發揮效果,是在符合條件的資料列被縮小到整體極小一部分的時候。會員編號全部不同,符合條件的只有1筆,可透過索引直接找到。都道府縣有47種,若平均分布,一個值大約可縮小到 100萬 ÷ 47 ≒ 2萬1千筆(整體的約2%)。性別有2種且大約各半,無論指定哪個值都有約50萬筆(約50%)符合。透過索引逐筆取出這麼多資料列,往往比從頭依序讀取表格的全表掃描更慢,因此DBMS的最佳化器可能選擇不使用索引的執行方式。像這樣,值的種類越多、能以條件縮小資料列的程度(選擇性)越高的欄位,索引的效果越大。
- A. 都道府縣有47種,一個值可縮小到整體的約2%,比性別更有效果。
- B. 正確。無論哪個值都有約一半的資料列符合,因此索引幾乎沒有效果。
- C. 會員編號全部不同,可縮小到1筆,是索引效果最大的欄位。