還是使用剛才的book表
刪除其已經存在的所有索引,然後新增新的復合索引
alter table book add index idx_book_at(authorid,typeid);
使用=執行查詢
explain select * from book where authorid = 1 and typeid = 2;
兩個索引都使用到了。
使用》進行查詢分析
可以看到自身索引和右側的索引都失效了。
而在最後面使用》,索引都沒有失效。
概率問題:
①、範圍查詢< > in 等,之後的索引會失效(補救:進行使用索引覆蓋)
建立(a,b,c)復合索引,select a,b,c from *** where a=.. and b=..;盡量將使用的索引覆蓋
②、like盡量以常量開頭,不要以%開頭,否則索引失效
select * from xx where name like "%x%"; --name索引會失效
如果必須使用這種模糊匹配,可以使用索引覆蓋挽救一部分:select name from xx where name like "%x%";name被索引覆蓋
③、盡量不要使用型別轉換(顯示、隱式),否則索引失效
explain select * from teacher where tname = 'abc';
explain select * from teacher where tname = 123;--123在底層會隱式轉換為'123',會導致索引失效
④、盡量不要使用or,否則索引失效
explain select * from teacher where tname='xx' or tcid>1; or會導致tname索引失效
3、一些其他的優化方法
①、exist和in
如果主查詢的資料集大,使用in,效率高。如果子查詢的資料集大,使用exist,效率高。(exist:將主查詢的結果放到子查詢結果中進行條件校驗(如果子查詢中包含該資料,校驗成功,保留資料))
②、order by
order by使用很容易出現using filesort,其右兩種演算法:雙路排序、單路排序。
對其優化主要是:選擇使用單路、雙路;調整buffer的容量;避免select * 。。。。;復合索引不要跨列使用,避免using filesort;保證全部的排序字段,排序的一致性(都是公升序或者都是降序)
mysql資料庫優化索引 mysql資料庫索引調優
一 mysql索引 1 磁碟檔案結構 innodb引擎 frm格式檔案儲存表結構,ibd格式檔案儲存索引和資料。myisam引擎 frm格式檔案儲存表結構,myi格式檔案儲存索引,myd格式檔案儲存資料 2 mysql資料庫資料範問原理 innodb btree 1 ibd檔案中主鍵構建b tree...
mysql資料庫優化之索引優化
一 如何選擇合適的列建立索引 1 一般會選擇在where從句中,group by從句中,order by從句中 join on 從句中,建立索引,在特殊情況下select 從句中,所出的列,進行索引,當乙個索引包含了查詢中的所有列,那麼稱之為這樣的索引為覆蓋索引,當我們的查詢執行的頻率非常高,並且索...
mysql資料庫索引優化策略
1.myisam,innodb錶用的都是b tree索引,都是 排好序的快速查詢結構 2.memory錶用的是hash索引 3.優缺點 1 hash索引的查詢理論的時間複雜度是0,但是無法對範圍查詢進行優化,無法對排序進行優化,必須回行取資料,無法i用字首索引 2 b tree可以利用做字首進行優化...