---
# System prepended metadata

title: 索引類型
tags: [Index研究]

---

###### tags: `Index研究`
# 索引類型

叢集索引、聚簇索引 
Clustered Index
---
>叢集索引（Clustered Index）直接修改原本的資料表順序，將資料按照要索引的欄位排，就是一個王牌的意思。如此可以讓資料搜尋非常有效率，尤其是依照順序（accessed sequentially）或是一個範圍連續資料的時候。想當然爾，一張資料表只會有一個叢集索引，通常就是主鍵欄位（primary key column）。
因為叢集索引會調整資料順序，所以它最大的特色就是實體的資料（physical data rows）跟索引表（index block/index table）中的順序會是一樣的。


非叢集索引、非聚簇索引、普通索引、複合索引、聯合索引、輔助索引
non-Clustered Index
---
>非叢集索引（Non-Clustered Index）是指不管資料在原本資料表中的排序，而在索引表中自己依照索引值建立排列。與叢集索引的差別是，叢集索引的排列順序就是實際上資料的排列順序，而非叢集索引的排列順序不會/無法影響到實際資料的排列順序。也因此，一個資料表中可以包含很多非叢集索引。
通常會使用非叢集索引的會是在 JOIN, WHERE 或是 ORDER BY 使用的非主鍵欄位（non-primary key columns）。


覆蓋索引 Convering Index
---
覆蓋索引是在索引中的一種特殊情況的InnoDB其中對於一個查詢所需的所有字段被包含在索引; 換句話說，索引本身包含執行查詢所需的數據，而不必執行其他讀取。
從non-Clustered Index中就可以取得想要的資料，不需再*回表查詢，稱覆蓋索引。
簡單說就是：Select的欄位正好是index的欄位


> Tip!
> 回表查詢(Lookup)：
> 意指Query中所需的欄位在使用的non-Clustered Index中未被包含，需在用完non-Clustered之後，再去Table或Clustered Index中查詢，組合出Query需要的結果。
> 此行為消耗的時間相對會比較大



{%hackmd theme-dark %}