Mysql效能優化案例 覆蓋索引分享

2021-08-05 23:29:14 字數 1260 閱讀 2474

場景

產品中有一張表,資料量將近100萬條,有一條相關的查詢語句,由於執行頻次較高,想針對此語句進行優化

表結構很簡單,主要字段:

複製**

**如下:

user_id 使用者id

picname 名稱

smallimg 小圖名稱

乙個使用者會有多條記錄

現在有乙個根據user_id建立的索引:uid

查詢語句也很簡單:取得某使用者的集合

複製**

**如下:

select picname, smallimg 

from pics where user_id = ***;

優化前

執行查詢語句(為了檢視真實執行時間,強制不使用快取)

複製**

**如下:

select sql_no_cache picname, smallimg 

from pics where user_id=17853;

執行了10次,平均耗時在40ms左右

使用explain進行分析

複製**

**如下:

explain select sql_no_cache picname, smallimg 

from pics where user_id=17853

使用了user_id的索引,並且是const常數查詢,表示效能已經很好了

優化後

因為這個語句太簡單,sql本身沒有什麼優化空間,就考慮了索引

修改索引結構,建立乙個(user_id,picname,smallimg)的聯合索引:uid_pic

重新執行10次,平均耗時降到了30ms左右

使用explain進行分析

看到使用的索引變成了剛剛建立的聯合索引,並且extra部分顯示使用了'using index'

總結

'using index'的意思是「覆蓋索引」,它是使上面sql效能提公升的關鍵

乙個包含查詢所需字段的索引稱為「覆蓋索引」

mysql只需要通過索引就可以返回查詢所需要的資料,而不必在查到索引之後進行回表操作,減少io,提高了效率

例如上面的sql,查詢條件是user_id,可以使用聯合索引,要查詢的字段是picname smallimg,這兩個欄位也在聯合索引中,這就實現了「覆蓋索引」,可以根據這個聯合索引一次性完成查詢工作,所以提公升了效能

MySQL索引優化案例

開發同學或多或少會遇到系統響應慢的問題,除了業務系統本身的問題外,常常會遇到sql查詢慢的問題,這篇文章結合實際案例分析mysql innodb儲存引擎的索引優化,這篇文章不會介紹b 樹的知識點,如果需要了解聚集索引和輔助索引特點的同學可以參考這篇文章,這篇文章主要會介紹三星索引和icp優化.首先是...

MySql索引優化案例

建立新錶 create table article id int unsigned not null primary key auto increment,author id int unsigned not null,category id int unsigned not null,views ...

MySQL 索引優化案例

建表 create table article id int unsigned notnull primary keyauto increment author id int unsigned notnull category id int unsigned notnull views int un...