首先,我們通過下面的方式生成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 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。索引是乙個單獨的 物理的資料庫結...