索引
索引資料結構
b+tree
1.磁碟讀寫代價更低hash索引(高效)2.查詢效率更加穩定
3.更有利於對資料庫的掃瞄
缺點bitmap點陣圖索引1.僅僅能滿足「=」,「in」
2.無法被用來避免資料的排序
3.不能利用部分索引查詢
4.不能避免表掃瞄
5.遇到大量hash重複
主要使用重複多比如性別:男,女目前oracle有位圖索引,mysql 沒有。
索引類別
常見分類
普通索引:僅加速查詢其他分類唯一索引:加速查詢 + 列值唯一(可以有null)
主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有乙個
組合索引:多列值組成乙個索引,專門用於組合搜尋,其效率大於索引合併
全文索引:對文字的內容進行分詞,進行搜尋
密集索引:密集索引檔案中的每個搜尋碼值都對應乙個索引值稀疏索引:稀疏索引檔案只為索引碼的某些值建立索引項
索引失效
同樣的sql如果在之前能夠使用到索引,那麼現在使用不到索引優化慢查詢sql隨著表的增長,where條件出來的資料太多,大於15%,使得索引失效(會導致cbo計算走索引花費大於走全表)
統計資訊失效 需要重新蒐集統計資訊
索引本身失效 需要重建索引
1.根據慢日誌定位慢查詢sql2.使用explain 等工具分析sql
3.修改sql或盡量讓sql走索引
關於索引的最左匹配原則
最左優先,以最左邊的為起點任何連續的索引都能匹配上。同時遇到範圍查詢(>、<、between、like)就會停止匹配。列: 組合索引 a,b,c,d.
當 a =, b=,c>,d= 時 只會用到 a b 索引 不會使用到 c 和 d 索引。
當 a = ,c= ,b= ,d= 時 ,系統會重排序使其使用到 a,b,c,d 索引
資料庫三正規化
1nf 列不可分割
2nf 完全依賴主鍵
3nf 不傳遞依賴
索引和慢查詢優化
01 為什麼要用索引 對於乙個應用來說,對資料庫的讀寫比例基本上是10 1,即讀多寫少 而且對於寫來說極少出現效能問題,大多數效能問題都是慢查詢 提到加速查,就必須用到索引 02 什麼是索引 索引就相當於書的目錄,是mysql中一種專門的資料結構,稱為key,索引的本質原理就是通過不斷地縮小查詢範圍...
慢SQL優化 索引優化
在專案開發的時候難免會寫一些sql語句,剛開始資料量比較小或沒預料到資料的增長速度很快,在後期的維護中偶爾會有慢sql出現,嚴重的會影響到線上服務正常執行和使用者體驗。當然慢sql的優化角度有多種,比如增 減索引 調整搜尋條件的順序 優化查詢結果引數 分庫分表 讀寫分離等等,但本篇我們主要談一下索引...
MySQL索引原理與慢查詢優化
索引的目的在於提高查詢效率,可以模擬字典,如果要查 mysql 這個單詞,我們肯定需要定位到m字母,然後從下往下找到y字母,再找到剩下的sql。如果沒有索引,那麼你可能需要把所有單詞看一遍才能找到你想要的,如果我想找到m開頭的單詞呢?或者w開頭的單詞呢?是不是覺得如果沒有索引,這個事情根本無法完成?...