彙集(clustered)索引,也叫聚簇索引。性能
- 定義:數據行的物理順序與列值(通常是主鍵的那一列)的邏輯順序相同,一個表中只能擁有一個彙集索引。
![](http://static.javashuo.com/static/loading.gif)
- 注:第一列的地址表示該行數據在磁盤中的物理地址,
- 後面三列纔是咱們SQL裏面用的表裏的列,其中id是主鍵,創建了彙集索引。
建立彙集索引
- 若是不建立索引,系統會自動建立一個隱含列做爲表的彙集索引。
- 注意:SQL Sever默認主鍵爲彙集索引,也能夠指定爲非彙集索引,
- 而MySQL裏主鍵就是彙集索引
非彙集索引
- 定義:該索引中索引的邏輯順序與磁盤上行的物理存儲順序不一樣,
- 除了彙集索引之外的索引都是非彙集索引,
- 只是人們想細分一下非彙集索引,分紅普通索引,惟一索引,全文索引
- 非彙集索引就像新華字典的偏旁字典,他結構順序與實際存放順序不必定一致
-
非彙集索引的二次查詢問題
- 非彙集索引葉節點仍然是索引節點,
- 只是有一個指針指向對應的數據塊,此若是使用非彙集索引查詢,
- 而查詢列中包含了其餘該索引沒有覆蓋的列,
- 那麼他還要進行第二次的查詢,查詢節點上對應的數據行的數據。(回表)
- 若是在數據量不大的狀況下,
- SQL Server頗有可能不會使用非彙集索引進行查詢,
- 而是使用匯集索引進行查詢,即使須要掃描整個彙集索引,效率也比使用非彙集索引效率要高
如何解決非彙集索引的二次查詢問題
總結與使用心得
- 使用匯集索引的查詢效率要比非彙集索引的效率要高,
- 非彙集索引在查詢的時候能夠的話就避免二次查詢,這樣性能會大幅提高。
- 不是全部的表都適合創建索引,
- 只有數據量大表才適合創建索引,且創建在選擇性高的列上面性能會更好。