什麼是索引
在資料庫中,從表格特定欄位的值快速找出具有該值之資料列位置的資料結構。常使用B+樹。能讓搜尋變快,但每次新增、修改、刪除資料列時都需要維護,也會占用儲存容量。
日文名稱: インデックス
「索引」出現在1領域的4道練習題中(資料庫基礎等)。
這個名詞所屬的領域: 資料庫基礎
在資料庫中,從表格特定欄位的值快速找出具有該值之資料列位置的資料結構。常使用B+樹。能讓搜尋變快,但每次新增、修改、刪除資料列時都需要維護,也會占用儲存容量。
日文名稱: インデックス
「索引」出現在1領域的4道練習題中(資料庫基礎等)。
這個名詞所屬的領域: 資料庫基礎
關聯式資料庫的索引常使用B+樹。B+樹是分支很多、從根到每個葉節點層數都相同的樹狀結構,葉節點依值的順序保存欄位的值與資料列的位置,葉節點之間也依序相連。若每個節點分出100個分支,3層就能區分100萬筆,因此即使是100萬筆資料列的表格,也只要讀取幾次就能找到目標資料列。由於葉節點依值的順序相連,不只能用於以 = 搜尋,也能用於BETWEEN之類的範圍搜尋與ORDER BY的排序。
索引在選擇性高、條件能把資料列縮小到整體極小一部分的欄位上能發揮效果。像會員編號這樣值全部不同的欄位最為理想,但在像性別這樣只有2種值的欄位上,約有一半的資料列符合,從頭依序讀取表格的全表掃描,往往比透過索引逐筆取出更快。此外,對欄位套用函數的條件,或像 LIKE '%華' 這樣的後方比對條件,一般的索引有時無法使用。
索引是與表格分開維護的資料結構。每次新增、修改、刪除資料列時,所有相關的索引也都必須修改,因此索引越多,寫入越慢,儲存容量也越大。因此基本做法是選擇經常作為搜尋或連結條件的欄位建立索引,並刪除未使用的索引。許多DBMS會自動為主鍵與UNIQUE限制的欄位建立索引。
正確答案:A. WHERE 會員編號 = 12345 這類搜尋變快,但每次新增或更新資料列時也要更新索引,因此寫入變慢
索引是從表格特定欄位的值,快速找出具有該值之資料列位置的資料結構,關聯式資料庫常使用B+樹。若沒有索引,要找出 WHERE 會員編號 = 12345 的資料列,就必須依序檢查100萬筆資料列(全表掃描),而使用B+樹只要從根到葉沿著幾層就能找到。例如每個節點分出100個分支,因為 100 × 100 × 100 = 100萬,大約3層即可。B+樹的葉節點依值的順序相連,因此也能用於BETWEEN之類的範圍搜尋與ORDER BY的排序。另一方面,每次新增、更新、刪除資料列時也必須更新索引,因此寫入會變慢,也需要索引所占的儲存容量。在未建立索引的欄位上搜尋不會變快。
正確答案:B. 性別
索引能發揮效果,是在符合條件的資料列被縮小到整體極小一部分的時候。會員編號全部不同,符合條件的只有1筆,可透過索引直接找到。都道府縣有47種,若平均分布,一個值大約可縮小到 100萬 ÷ 47 ≒ 2萬1千筆(整體的約2%)。性別有2種且大約各半,無論指定哪個值都有約50萬筆(約50%)符合。透過索引逐筆取出這麼多資料列,往往比從頭依序讀取表格的全表掃描更慢,因此DBMS的最佳化器可能選擇不使用索引的執行方式。像這樣,值的種類越多、能以條件縮小資料列的程度(選擇性)越高的欄位,索引的效果越大。
並不好。索引越多,每次新增或修改資料列時的維護負擔越大,也越占儲存容量。應選擇經常作為搜尋或連結條件、能充分縮小資料列的欄位來建立。
可能是最佳化器判斷符合條件的資料列太多、全表掃描較快,或是條件無法利用索引的排列順序,例如對欄位套用函數的條件、後方比對的LIKE等。
索引是從表格特定欄位的值,快速找出具有該值之資料列位置的資料結構,關聯式資料庫常使用B+樹。
在有100萬筆資料列的會員表格之會員編號欄位上建立了B+樹索引。一般可預期的效果與代價組合,下列何者正確?索引能發揮效果,是在符合條件的資料列被縮小到整體極小一部分的時候。
在有100萬筆資料列的日本會員表格中,考慮分別在會員編號(全部不同)、都道府縣(47種)、性別(2種,大約各半)欄位上…DDL(Data Definition Language)是定義表格、檢視表、索引等資料庫結構的敘述,包括CREATE、ALTER、DROP。
SQL敘述可分為資料定義語言(DDL)、資料操作語言(DML)與資料控制語言(DCL)。屬於DDL的是下列何者?用來快速尋找值的樹狀結構,是索引的說明。
關於關聯式資料庫的檢視表,下列敘述何者正確?