索引結構,索引類別,慢查詢優化

2021-09-25 22:54:27 字數 1325 閱讀 2416

索引

索引資料結構

b+tree

1.磁碟讀寫代價更低

2.查詢效率更加穩定

3.更有利於對資料庫的掃瞄

hash索引(高效)

缺點

1.僅僅能滿足「=」,「in」

2.無法被用來避免資料的排序

3.不能利用部分索引查詢

4.不能避免表掃瞄

5.遇到大量hash重複

bitmap點陣圖索引

主要使用重複多比如性別:男,女

目前oracle有位圖索引,mysql 沒有。

索引類別

常見分類

普通索引:僅加速查詢

唯一索引:加速查詢 + 列值唯一(可以有null)

主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有乙個

組合索引:多列值組成乙個索引,專門用於組合搜尋,其效率大於索引合併

全文索引:對文字的內容進行分詞,進行搜尋

其他分類

密集索引:密集索引檔案中的每個搜尋碼值都對應乙個索引值

稀疏索引:稀疏索引檔案只為索引碼的某些值建立索引項

索引失效

同樣的sql如果在之前能夠使用到索引,那麼現在使用不到索引

隨著表的增長,where條件出來的資料太多,大於15%,使得索引失效(會導致cbo計算走索引花費大於走全表)

統計資訊失效 需要重新蒐集統計資訊

索引本身失效 需要重建索引

優化慢查詢sql

1.根據慢日誌定位慢查詢sql

2.使用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開頭的單詞呢?是不是覺得如果沒有索引,這個事情根本無法完成?...