建了索引卻不走索引案例分析

2021-08-10 04:43:33 字數 779 閱讀 2325

這個部落格和我生產碰到的很像:

create tablet_order(

idbigint(20) unsigned not null auto_increment,

order_codechar(12) not null,

order_amountdecimal(12,2) not null,

primary key (id),

unique keyuni_order_code(order_code) using btree

) engine=innodb auto_increment=1 default charset=utf8;

select order_code, order_amount from t_order order by order_code limit 1000;

優化器在優化時有兩條選中:

全表掃瞄:直接全表掃瞄出內容order_code, order_amount,然後排序

索引掃瞄:先走索引order_code索引,再回表取出amount,隨機io,然後排序

limit 1000,優化器任務結果集很大,所以任務走全表掃瞄,減少隨機io,然後排序的方案較好

但是如果結果集很小時,又認為走索引,然後回表更好點

優化方案:覆蓋索引

index(order_code, order_amount)

SQL 優化之該走索引卻不走索引的分析(二)

sql優化器簡介 基於規則的優化器 總是使用索引 總是從驅動表開始 from子句最右邊的表 只有在不可避免的情況下,才使用全表掃瞄 任何索引都可以 基於成本的優化器 需要表 索引的統計資料 analyze table customer compute statistics analyze table...

某字段不走索引分析

表t busi main presend2建了索引t busi main presend2 shstatus在shstatus欄位,shstatus char 1 default 0 只有2個值 0 1 初始值為 0 處理之後為 1 表中幾十萬資料,大部分為 1 現在有8條為 0 現在,建索引 型別...

YII強制走索引

在專案中由於查詢條件異常繁雜,導致sql不會走索引 比如查詢兩個條件,增加 or 這樣就倒是這個不走索引 問題解決啟發聯想 so 直接上 model new yii db query select id,username,first uid,second uid,created at from pr...