2

当存在多个索引的情况下, 有时候Mysql自动选的索引并不是最优的, 此时需要显式指定一个更优索引。

如想查询今天领取且已过期状态的优惠券

刚开始使用的sql是

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万多数据

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条记录

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

zhuguowei2
825 声望26 粉丝

引用和评论

0 条评论