MySQL使用索引與不使用索引比較

2021-07-29 16:47:11 字數 1525 閱讀 7372

首先,我們通過下面的方式生成1百萬條資料。

在不建立索引情況下,通過下面的語句查詢age=20的人數

select

count(1) from

`t_user`

where age=20;

耗時:1.2s

通過下面的語句檢視執行計畫

explain select

count(1) from

`t_user`

where age=20;

結果如下,總共查詢了1000359條:

下面,我們為age欄位建立普通索引。

alter table t_user add index index_age(age);

再次執行查詢語句和檢視執行計畫,完成查詢只需要50ms,執行計畫如下:

我們通過名稱來查詢使用者

select * from t_user where name='[email protected]';
耗時:1.8s

通過下面的語句檢視執行計畫,如下:

下面我們為name欄位建立唯一索引:

alter

table t_user add

unique index_name(`name`);

建立索引後,再次查詢,發現只需要1ms,再次檢視執行計畫,如下:

我們通過名稱和年齡來模糊匹配使用者

select * from `t_user` where `name` like '187%' and age=20;
耗時:200ms

檢視執行計畫:

雖然我們為name和age建立了兩個索引,但mysql只能用到其中的那個它認為似乎是最有效率的索引。

下面,我們為name、age兩個字段建立組合索引:

再次查詢,發現耗時還是:200ms,檢視執行計畫,發現跟上面一樣。

這說明mysql在index_name,index_age,index_name_age3個索引中,認為index_age的效率最高。

下面,我們將index_age索引刪除。

drop index index_age on t_user;
再次執行,檢視執行計畫:

發現壓根沒有命中索引。

思考許久,覺得可能是like造成的呢,於是乎,改變策略,刪除以前的組合索引,建立index_age_name組合索引。

alter

table t_user add index index_age_name(age,name);

檢視執行計畫,確實命中了index_age_name索引。

mysql強制使用索引與不使用索引

oracle可以強制使用索引來優化那些因為種種原因沒走索引的sql mysql支援嗎?答案是肯定的 mysql強制索引和禁止某個索引 1.mysql強制使用索引 force index 索引名或者主鍵pri 例如 select from table force index pri limit 2 強...

MySQL何時使用索引 何時不使用索引

mysql何時使用索引 對乙個鍵碼使用 if null和between select from table name where key part1 1 and key part2 5 select from table name where key part1 is null 當使用不以萬用字元開...

論MySQL何時使用索引,何時不使用索引

論mysql何時使用索引,何時不使用索引 索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 name 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。索引是乙個單獨的 物理的資料庫結...