資料庫基礎
在有100萬筆資料列的會員表格之會員編號欄位上建立了B+樹索引。一般可預期的效果與代價組合,下列何者正確?
- AWHERE 會員編號 = 12345 這類搜尋變快,但每次新增或更新資料列時也要更新索引,因此寫入變慢
- B所有欄位的搜尋都變快,而且沒有代價
- C表格的資料列會依會員編號排序,因此任何搜尋都變快,而且儲存容量減半
查看答案與解析
正確答案:A. WHERE 會員編號 = 12345 這類搜尋變快,但每次新增或更新資料列時也要更新索引,因此寫入變慢
索引是從表格特定欄位的值,快速找出具有該值之資料列位置的資料結構,關聯式資料庫常使用B+樹。若沒有索引,要找出 WHERE 會員編號 = 12345 的資料列,就必須依序檢查100萬筆資料列(全表掃描),而使用B+樹只要從根到葉沿著幾層就能找到。例如每個節點分出100個分支,因為 100 × 100 × 100 = 100萬,大約3層即可。B+樹的葉節點依值的順序相連,因此也能用於BETWEEN之類的範圍搜尋與ORDER BY的排序。另一方面,每次新增、更新、刪除資料列時也必須更新索引,因此寫入會變慢,也需要索引所占的儲存容量。在未建立索引的欄位上搜尋不會變快。
- A. 正確。搜尋變快,但每次寫入維護索引的負擔會增加。
- B. 索引只對建立索引的欄位之搜尋有效,而且有寫入負擔與儲存容量的代價。
- C. 索引是與表格分開建立的資料結構,儲存容量反而會增加。