强制sql使用一个索引

sqlt提示(SQL HINT)是优化数据库的重要手段,就是在sql中增加一些提示起到优化的效果。

这里我们学习一下use index、ignore index、和force index;

1 在查询语句之后加入use index,可以向Mysql建议可以参考的索引,就可以让mysql不在考虑其他索引。

explain select count(*) from vipshop_finance_account ;

explain select count(*) from vipshop_finance_account use INDEX(idx_user_id) ;
explain select count(*) from vipshop_finance_account ;

SIMPLE  vipshop_finance_account index       idx_open_wpb_status 2       12816   Using index

explain select count(*) from vipshop_finance_account use INDEX(idx_user_id) ;

SIMPLE  vipshop_finance_account index       idx_user_id 152     12816   Using index

可以看到sql接受了我们的建议,使用了我们建议的索引。

2 如果希望mysql忽略一个或者多个索引,可以使用 ignore index,

explain select count(*) from vipshop_finance_account IGNORE INDEX( idx_open_wpb_status);

SIMPLE  vipshop_finance_account index       idx_withhold_wpb_status 2       12816   Using index

可以看到,这时候mysql再次接受了我们的建议,忽略了索引idx_open_wpb_status,使用了idx_withhold_wpb_status这个索引。

3 force index

EXPLAIN SELECT * from vipshop_trade_log where related_tradeId>'004201509151046563846447';
EXPLAIN SELECT * from vipshop_trade_log USE INDEX (idx_related_tradeid) where related_tradeId>'004201509151046563846447';
EXPLAIN EXTENDED SELECT * from vipshop_trade_log FORCE INDEX (idx_related_tradeid) where related_tradeId>'004201509151046563846447';

执行结果

SIMPLE  vipshop_trade_log   ALL idx_related_tradeid             2068592 Using where
SIMPLE  vipshop_trade_log   ALL idx_related_tradeid             2068592 Using where
SIMPLE  vipshop_trade_log   range   idx_related_tradeid idx_related_tradeid 767     1034296 100 Using where

可见,这里第三个sql,我们的建议被采纳,使用了idx_related_tradeid作为查询的索引,减少了搜索的行数。第二个sql语句没有使用索引,说明我们的建议并不是总被Mysql接纳。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值