##索引型別
####b-tree索引
####hash索引
---兩種索引對比
1. hash函式計算後的結果不是連續的,因此可以認為是隨機儲存在磁碟上。
2. 無法進行範圍查詢優化,也無法利用字首優化,排序優化。
3. 必須回行,通過索引拿到資料的位置,回到表裡去資料。
###b-tree索引
**原理**:b+樹是一種平衡樹,建樹時安從這至右的順序建立搜尋樹,查詢時也應該按照從左至右的順序查詢。這就是索引的最左匹配性質。
如果建立索引(a,b,c)
* where a=3 是,只使用了a列
* where a=3 and b=5 是,使用了a,b列
* where a=3 and b=5 and c=4 是,使用了abc
* where b=3 / where c=4 否
* where a=3 and c=4 a列能發揮索引,c不能
* where a=3 and b>10 and c=7 a能利用,b能利用, c不能利用
* 同上,where a=3 and b like 『***x%』 and c=7 a能用,b能用,c不能用
假設某個表有乙個聯合索引(c1,c2,c3,c4)一下——只能使用該聯合索引的c1,c2,c3部分
* a where c1=x and c2=x and c4>x and c3=x
* b where c1=x and c2=x and c4=x order by c3
* c where c1=x and c4= x group by c3,c2
* d where c1=x and c5=x order by c2,c3
* e where c1=x and c2=x and c5=? order by c2,c3
a:等價於c1=x and c2=x and c3=x and c4>x 四個都能用上。
b:當order by ,group by中的字段出現在where條件中時,才會利用索引而不排序,更準確的說,order by 中的字段在執行計畫中利用了索引時,不用排序操作。c3沒有在where中,因此用了c1和c2.由於c1和c2,已經固定,所以c3已經是有序的了,該語句不用全表排序。
c:只用了c1。使用c3之前沒有c2並不是固定的,因此需要全表排序。
d:只用了c1,但利用了c2和c3的索引,不用全表排序。
e:用了c1和c2,同樣不用全表排序。
資料庫 索引 主鍵 聯合索引
參考自 索引 通過key或index定義 可以極大地提高資料查詢速度,但是會降低插入刪除更新表的速度,因為在執行這些操作是,還要操作索引檔案用來維護,所以說索引不是建的越多越好而是要建在合理的字段,比如使用者表,可以建在手機號,郵箱號上。同時,索引可以覆蓋多個列,也就成了聯合索引。主鍵,在一張表中只...
MySql資料庫索引 聚集索引 聯合索引
通過建立索引可以有效的提高查詢效能。索引也分為很多種 聚集 非聚集 聯合索引等 資料結構主要有雜湊索引和b 樹等,雜湊索引在單個查詢效能上很強大,但不適合做範圍查詢。以下討論主要是建立在b 樹索引上面的。索引一般採用b 樹的資料結構,b 樹是乙個有序的樹形結構,每個父節點可以有多個子節點,子節點之間...
資料庫之索引
1 索引的出現其實就是為了提高資料查詢的效率,就像書的目錄一樣。2 索引的出現是為了提高查詢效率,但是實現索引的方式卻有很多種,所以這裡也就引入了索引模 型的概念。可以用於提高讀寫效率的資料結構很多,這裡我先給你介紹三種常見 也比較簡單的 資料結構,它們分別是雜湊表 有序陣列和搜尋樹。2 雜湊表 假...