記一次需強制指定使用某一索引的例子

當存在多個索引的狀況下, 有時候Mysql自動選的索引並非最優的, 此時須要顯式指定一個更優索引。sql

如想查詢今天領取且已過時狀態的優惠券spa

剛開始使用的sql是code

select * from coupon_user  where  status = '20' and create_time > current_date order by id desc ;

要等半天才有結果 查看錶結構 發現status和create_time均加了索引索引

KEY `idx_status` (`status`),
KEY `create_time` (`create_time`),

但實際使用的是status索引 故需查詢1349萬多數據it

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE coupon_use range idx_status,create_time idx_status 9 const 13498998 Using where;

針對這種情形 能夠強制使用create_time索引 此時只需查詢7410條記錄io

select * from coupon_user force index(create_time) where  status = '20' and create_time > current_date order by id desc;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE coupon_use range idx_status,create_time create_time 4 7410 Using index condition; Using where; Using filesort
相關文章
相關標籤/搜索