資料庫之聯合索引

2021-09-10 06:38:15 字數 1235 閱讀 4302

##索引型別

####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 雜湊表 假...