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一定不会扫表,至少会用到其中提供的一个索引。


参考资料:


更多文章
  • 容器时代的日志处理
  • Golang和Thrift
  • 折腾Kubernetes
  • 协程(coroutine)简介 - 什么是协程?
  • goroutine 切换的时候发生了什么?
  • Prometheus 数据类型
  • Gin源码阅读与分析
  • 如何面试-作为面试官得到的经验
  • 自己写一个容器
  • Golang(Go语言)中实现典型的fork调用
  • 软件开发之禅---大事化小,各个击破
  • 程序员的自我修养:链接,装载与库 阅读笔记
  • Redis源码阅读与分析二:双链表
  • Redis源码阅读与分析三:哈希表
  • Redis源码阅读与分析一:sds