索引就是資料結構,通過這種資料結構可以大大提高mysql的查詢效率
當表中的資料量越來越大時,索引對於效能的影響愈發重要。索引優化應該是對查詢效能優化最有效的手段了。索引能夠輕易將查詢效能提高好幾個數量級。有了索引相當於我們給資料庫的資料加了目錄一樣,可以快速的找到資料,如果不適用索引則需要一點一點去查詢資料
簡單來說
提高資料查詢的效率。
- 1.普通索引index :加速查詢
- 2.唯一索引
- 3.聯合索引(組合索引)
- 4.全文索引fulltext :用於搜尋很長一篇文章的時候,效果最好。
索引的實現本質上是為了讓資料庫能夠快速查詢資料,而單獨維護的資料結構,mysql實現索引主要使用的兩種資料結構:hash和b+樹: 我們比較常用的 myisam 和 innodb引擎都是基於b+樹的。
hash:(hash索引在mysql比較少用)他以把資料的索引以hash形式組織起來,因此當查詢某一條記錄的時候,速度非常快.當時因為是hash結構,每個鍵只對應乙個值,而且是雜湊的方式分布.所以他並不支援範圍查詢和排序等功能.
b+樹:b+tree是(mysql使用最頻繁的乙個索引資料結構)資料結構以平衡樹的形式來組織,因為是樹型結構,所以更適合用來處理排序,範圍查詢等功能.相對hash索引,b+樹在查詢單條記錄的速度雖然比不上hash索引,但是因為更適合排序等操作,所以他更受使用者的歡迎.畢竟不可能只對資料庫進行單條記錄的操作.
一般使用磁碟i/o次數評價索引結構的優劣
b+tree的度一般會超過100,因此h非常小 (一般為3到5之間),效能就會非常穩定
b+tree葉子節點有順序指標,更容易做範圍查詢
優勢
1.可以通過建立唯一索引或者主鍵索引,保證資料庫表中每一行資料的唯一性.
2.建立索引可以大大提高檢索的資料,以及減少表的檢索行數
3.在表連線的連線條件 可以加速表與表直接的相連
4.在分組和排序字句進行資料檢索,可以減少查詢時間中 分組 和 排序時所消耗的時間(資料庫的記錄會重新排序)
5.建立索引,在查詢中使用索引 可以提高效能
劣勢
1.索引檔案會占用物理空間,除了資料表需要占用物理空間之外,每乙個索引還會占用一定的物理空間
2.在建立索引和維護索引 會耗費時間,隨著資料量的增加而增加
3.當對表的資料進行insert,update,delete 的時候,索引也要動態的維護,這樣就會降低資料的維護速度
適合建立索引
1.主鍵自動建立唯一索引:primary
2.頻繁作為查詢條件的字段應該建立索引
where name =
3.查詢中與其它表關聯的字段,外來鍵關係建立索引
dept id employ dep_id
4.查詢中排序的字段,排序的字段若通過索引去訪問將大大提公升排序速度
order by age
5.查詢中統計或分組的字段
group by age
不適合建立索引
1.記錄比較少
2.where條件裡用不到的字段不建立索引
3.經常增刪改的表
索引提高了查詢的速度,同時卻會降低更新表的速度,因為建立索引後, 如果對錶進行insert,update 和 delete, mysql不僅要儲存資料,還要儲存一下索引檔案
4.資料重複的表字段
如果某個資料列包含了許多重複的內容,為它建立索引 就沒有太大在的實際效果,比如表中的某乙個欄位為國籍,性別,資料的差異率不高,這種建立索引就沒有太多意義。
-- 最左匹配原則 *
-- 範圍條件右邊的索引失效
-- 不再索引列上做任何操作 *
-- 使用不等於(!=或者<>)索引失效
-- is not null無法使用索引
-- like以萬用字元開頭(%qw)索引失效 *
-- 字串不加引號索引失效
-- 使用or連線索引失效
-- 盡量使用覆蓋索引
MySQL索引效能優化
紅黑樹 hash表,是現在可以選擇的索引資料結構 b tree b tree b tree變種 可以保證樹的高度,就算記錄數多的時候查詢的次數也比較少,效率高,所有是現在預設使用的索引資料結構 在聯合索引的情況下,都在遵循最左字首法制 這個也是因為節點的資料索引是由第乙個索引先通過索引最左字首原理 ...
效能優化之mysql索引優化
sql及索引優化 如何通過慢查詢日誌發現有問題的sql?查詢次數多且每次查詢占用時間長的sql 通常為pt query digest分析的前幾個查詢 io大的sql 注意pt query digest分析中的rows examine項 未命中索引的sql 注意pt query digest分析中ro...
Mysql 索引及優化
索引是什麼?相信大家都用過字典。你是怎麼從厚厚的新華字典中找到你需要找到的那個字的呢?又是怎麼從一本書中快速定位到你需要的章節?我們都是通過書中的目錄,然後根據目錄中的頁碼定位到我們要的資訊。同樣在mysql中也是這樣為我們準備了乙份目錄。當你去通過sql語句查詢的時候用不用索引,以及怎麼用索引。決...