请教一下计划绑定的问题

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0
  • 【问题描述】: 现在我的业务有一条查询业务的sql,类似 select * from table_a a where a.a1 in (id1,id2,id3…) and a.a2 = ‘xxx’ 这里a1,a2都有设置索引,我的查询业务有个特点是a1 in 里面的id数量是不确定的,时多时少。 最近发现一个情况就是这条sql走了索引a2,当a1 in里面的id很多的时候,这条sql会执行的很慢,查询时间差不多就是随着a1 in里面的id增多时间递增。当我手动use index(a1)时,不论a1 in的id多还是少,执行时间都是很快的,统计信息等等也收集了,但是执行计划还是选择走a2索引。这里想用一下计划绑定,请问这种in的可以使用计划绑定不?具体怎么使用呢?我在看https://pingcap.com/docs-cn/stable/reference/performance/execution-plan-bind/ 【 执行计划绑定】一文没有看到如何对这种in的创建计划绑定

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

尝试使用 use index 试试。https://pingcap.com/docs-cn/stable/faq/tidb/#3312-sql-中如何通过-hint-使用一个具体的-index

我就是使用use index得出a2索引会比较快,但是我sql是动态拼接的,不能写死use index在sql里面,所以才想用计划绑定,现在的问题就是in这种能使用计划绑定不?或者相同指纹的

支持的,建议使用 3.0.8 之后的版本,3.0.8 修了一个 bug。