萬物 歸於算法 數據結構;理解更深刻
如:索引->B+Tree->最左匹配原則;左模糊查詢不走索引
索引 B+ tree 平衡多路查找樹+鏈表
葉子節點鏈表 支持 范圍查詢走索引 不過放在組合索引最后一個 知道開始的節點 結束的節點 直接取出一段鏈表
所以 同樣范圍的查詢 > < between 比 in 效率的高 應該
q&a:為啥不用 二叉 ?可能單從數據結構來看 時間復雜度 空間復雜度 平均查找時間 二叉更優 (待研究)但是 具體問題 具體分析 多路 減少層數 減少磁盤io
1. 【強制】業務上具有唯一特性的字段,即使是組合字段,也必須建成唯一索引。
說明:不要以為唯一索引影響了 insert 速度,這個速度損耗可以忽略,但提高查找速度是明顯的;另外,
即使在應用層做了非常完善的校驗控制,只要沒有唯一索引,根據墨菲定律,必然有臟數據產生。
// 唯一索引查找更快 因為查到第一個就不繼續查了 和limit 一樣 查夠了 就停止查了
// 唯一索引查找更快 因為查到第一個就不繼續查了 和limit 一樣 查夠了 就停止查了
6. 【推薦】利用覆蓋索引來進行查詢操作,避免回表。
說明:如果一本書需要知道第 11 章是什么標題,會翻開第 11 章對應的那一頁嗎?目錄瀏覽一下就好,這
個目錄就是起到覆蓋索引的作用。
正例:能夠建立索引的種類分為主鍵索引、唯一索引、普通索引三種,而覆蓋索引只是一種查詢的一種效
果,用 explain 的結果,extra 列會出現:using index。
https://blog.csdn.net/hao65103940/article/details/89032538
B Tree 平衡樹
何為平衡樹
https://blog.csdn.net/qq_33060405/article/details/78510121
擴展:自平衡樹 紅黑樹
jdk 1.8 HashMap 數據結構由 數組+鏈表 改為 數組+鏈表/紅黑樹
插入時:判斷鏈表長度是否大於8,大於8的話把鏈表轉換為紅黑樹,在紅黑樹中執行插入操作,否則進行鏈表的插入操作
刪除時:刪除元素首先是要找到 桶的位置,然后如果是鏈表,則進行鏈表遍歷,找到需要刪除的元素后,進行刪除;如果是紅黑樹,也是進行樹的遍歷,找到元素刪除后,進行平衡調節,注意,當紅黑樹的節點數小於 6 時,會轉化成鏈表。
時間復雜度 空間復雜度 平均查找時間 時間空間的取舍 現在一般相對空間 時間更稀缺 所以 一般選擇 可以 犧牲空間換取時間