1.索引
1.b+tree:索引底層是用的b+tree資料結構,這種結構可以大幅度提公升查詢效能,因為b+tree底層是由葉子節點組成的單向列表,塑造出它的穩定性,尤其是範圍內的資料檢索。b樹遍歷需要繁瑣的中序遍歷,b+s樹就不需要,直接讀取單鏈表就可以獲取到範圍內資料,由於b+tree相比較於b樹,其樹的的高度會相比較低,所以在遍歷時會少很多遍歷的時間,在時間複雜度上就已經很低。所以b+tree是目前為止效能最高的索引結構。索引之所快也就是將傳統的順序遍歷改為二分查詢,可以使得要遍歷的次數很大程度上減少。
2.mysql索引:b+tree索引是目前大多數mysql預設索引方式,索引又分為聚簇索引和非聚簇索引。聚簇索引是乙個記錄著資料的索引節點,非聚簇索引是存著主鍵id,再由id去尋找真實資料。
雜湊索引:雜湊索引是查詢速度極快的一種索引,其時間複雜度能到o(1),但是由於是hash策略實現。所以不支援排序和分組,只支援精確查詢,不支援範圍查詢和範圍查詢。
全文索引:innodb不支援全文索引,myisam支援全文索引,記錄著關鍵字到文獻的對映。
3.索引優化
1.索引的優化實質上就是盡可能的利用到索引,索引在查詢過程中既不能是函式一部分也不能是表示式一部分,不然會導致索引失效的問題。
2.盡可能的使用多列索引,多列索引會讓限制條件更加嚴格,讓索引發揮更大的作用。
3.索引列的順序有時候也會影響查詢效率。
4.對於blob,text,varchar型別的資料使用字首索引再好不過,可以只索引前部分的資料,可以節省時間。
5.覆蓋索引
4.索引的優點
1.索引會讓我們查詢次數降低,實質層面上也就減少了io操作,因為io操作相當費時;
2.幫助伺服器避免分組和排序,因為索引在資料結構層面上,已經有排序和分組的特徵。
3.穩定性,將隨機性的io變成順序性的io,b+tree索引會將相鄰的資料節點放在一起。
5.索引的適合範圍
1.索引在小資料量的資料庫中,發揮的作用並不大,因為建立索引也是一定程度上增加了空間複雜度,大部分建立全表掃瞄要比建立索引更加高效。
2.在中型資料量的資料庫上可以加索引,因為這個可以大幅度提公升資料的查詢效率。
3.大型資料量的資料庫上,不僅需要索引,也可以考慮建立分庫分表技術來緩解資料庫的壓力。
6.查詢的優化
1.對於大查詢可以將大查詢分割成乙個個小查詢,有效減少伺服器的壓力。
2.分解大連線查詢
三.儲存引擎
目前mysql兩個儲存引擎分別為 innodb和myisam引擎;從幾個維度來對這兩個儲存引擎進行比對。
事務:前者支援事務,後者不支援事務
外來鍵:前者支援外來鍵,後者不支援外來鍵
熱備份:前者支援熱備份,後者不支援熱備份
安全性:前者課恢復性更高,後者崩潰可恢復性比較低。
併發:myisam支援表級鎖,innodb還支援行級鎖。
其他:myisam支援空間索引和壓縮表。
mysql 優化方案,純乾貨
查詢資料庫的資料盡量使用索引來查詢,避免全表掃瞄。盡量只查詢索引條件的字段,例如,一張user使用者資料表的id欄位為索引,name為使用者為非索引字段,當查詢某條資料時,直接用id查詢比用name查詢效率會高很多。因為葉子節點儲存id的值,這樣不用回表查詢,實現了索引覆蓋。從資料庫中查詢資料,sq...
純乾貨 MYSQL 基礎 一
select from t doctor where doctor name 布隆 分組可能不是特別好理解,我單獨舉例解釋下 假如有一張 表,和任務表,小姐姐的任務是要隨訪自己負責的病人,1個 小姐姐負責多個病人,任務表中存著所有 小姐姐,執行的所有任務。現在查一下,每個 小姐姐,各自做了多少次任務...
MySQL索引(純筆記乾貨)
結構預設為b 樹,少部分為hash桶 有聚集索引,非聚集索引之分 加索引後查詢效率變快 但是為了維護b 樹的穩定,增刪改會變慢 主鍵索引為聚集索引,聚集索引只有乙個,索引鍵值的邏輯順序和物理順序一致 非聚集索引和聚集索引一樣,採用b 樹作為索引,每次給字段建立一條索引,欄位中的資料就會被複製出來乙份...