MySQL指定使用索引(使用索引提示)

也叫index hint

可以看到官方文档中,BNF如下:

index_hint_list:
    index_hint [index_hint] ...

index_hint:
    USE {INDEX|KEY}
      [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])
  | {IGNORE|FORCE} {INDEX|KEY}
      [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)

index_list:
    index_name [, index_name] ...)

也就是说,指定索引的时候,可以同时指定多个,但是MySQL一定只会在指定的索引中选一个使用,所以一定要考虑清楚SQL语句是否 能利用上索引:

UPDATE xxx_table USE INDEX (index_a, index_b) SET updated_at='2019-09-25 00:00:00' where xxx

与之相反的使用,是 IGNORE INDEX (index_a, index_b) 这会告诉MySQL,避免使用这几个索引。

使用索引还有一种用法,那就是使用 FORCE INDEX,与 USE INDEX 的区别在于,这会告诉MySQL,扫表的代价非常昂贵,因此,除非 用不到索引,否则MySQL一定不会扫表,至少会用到其中提供的一个索引。


参考资料:


更多文章
  • Swift语法笔记
  • 读《管理的实践》
  • 后端工程师学前端(一): HTML
  • frp 源码阅读与分析(二):TCP内网穿透的实现
  • 五天不用微信 - 爽得很
  • frp 源码阅读与分析(一):流程和概念
  • 学习frp源码之简洁的在两个connection之间转发流量
  • 自己动手写一个反向代理
  • 读《债务危机》
  • 从XMonad迁移到i3
  • 服务器IP被ban学到的经验
  • socks5 协议详解
  • 开启HSTS(HTTP Strict Transport Security)
  • 从Chrome切换到Firefox
  • 网络乞讨之合并支付宝和微信的收款二维码