9.索引提示(INDEX HINT)

本文详细介绍了MySQL中的索引提示(INDEXHINT)功能,如何在两种特定情况下使用它:优化器错误选择索引或查询选择索引过多。通过示例展示了USEINDEX和FORCEINDEX的区别,解释了如何通过强制索引使用提升查询效率。推荐在优化器分析成本较高时使用FORCEINDEX来确保使用预设的最佳索引。
摘要由CSDN通过智能技术生成

MySql支持索引提示(INDEX HINT)显式地告诉优化器使用那个索引。

一般来说,下面两种情况需要用到索引提示:
1)MySql错误的使用了某个索引从而导致SQL语句运行的非常慢。(这种情况非常少见,如果遇见了,就去买彩票吧)
2)某些SQL语句可以选择的索引非常多,这时优化器选择执行计划时间的开销可能会大于SQL语句本身。 这时使用索引提示是有必要的。
例如,优化器分析Range查询本身就是比较耗时的操作,
这时DBA或开发人员分析最优的索引选择,通过INDEX HINT来强制让优化器直接选择指定的索引进行查询,而不去分析选择使用那个索引。

使用索引提示的sql语句有两种:

SELECT * FROM t USE INDEX(a) WHERE a=1 AND b = 2;

这个语句只是提醒优化器使用那个索引,具体的选择还是优化器说了算,不推荐使用。

SELECT * FROM t FORCE INDEX(a) WHERE a=1 AND b = 2;

这条语句强制优化器直接使用指定的索引进行查询,推荐使用。

例子:
首先,创建一张表

CREATE TABLE t(
    a INT,
    b INT,
    key(a),
    key(b)
)

然后向其中插入数据:

INSERT INTO t(a,b)values(1,1);
INSERT INTO t(a,b)values(1,2);
INSERT INTO t(a,b)values(2,3);
INSERT INTO t(a,b)values(2,4);
INSERT INTO t(a,b)values(1,2);
INSERT INTO t(a,b)values(1,4);

然后查看下面语句的执行计划:

select * from t where a=1 and b=2 ;

在这里插入图片描述

通过key值我们可以看到,此次查询使用了两个索引b,a。
Extra列提示的Using intersect(b,a)表示根据两个索引得到的结果进行求交的数学运算,最后得到结果。

下面使用USE INDEX来提示优化器进行查询:

select * from t use index(a) where a=1 and b=2 ;

在这里插入图片描述

可以看到也起到了作用。

下面使用FORCE INDEX进行强制使用某索引:

select * from t force index(a) where a=1 and b=2 ;

在这里插入图片描述

推荐使用这种方式!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值