這個部落格和我生產碰到的很像:
create tablet_order
(
id
bigint(20) unsigned not null auto_increment,
order_code
char(12) not null,
order_amount
decimal(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...