两个字段创建联合唯一索引,使用多条OR查询无法命中索引

【TiDB 使用环境】生产环境
【TiDB 版本】
【操作系统】欧拉SP4
【部署方式】物理机SSD
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
多条


单条

or查询数据库有什么限制吗

改成where (a,b) in ((),(),())试试
或者用/*+ USE_INDEX_MERGE(t1, idx_a) */ 这个hint

1 个赞

目前是使用binding去解决这个问题的,不太想去动代码这一层 :rofl:

试试/*+ USE_INDEX_MERGE(t1, idx_a) */ 这个hint呢

这个参数默认打开的呀

这个好像是多索引聚合的,现在我遇到的问题是建立了一个索引但是无法命中

使用hint是可以命中索引的

1 个赞

使用USE_INDEX_MERGE可以嘛

可以的

使用USE_INDEX_MERGE。。每个or字段都创建索引。。

换一种拼接方式试试,用with 表a as (select 1 union select ) 做个虚拟表,然后jion

1 个赞

oracle上经常这么干 查询效率快很多

做sql改写成and吧,or好像的确不好走索引

对,感觉or应该不会走索引。

联合索引其实就是一张小表,一张类似于目录的小表而已