执行sql语句,一个表只能命中一个索引吗?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】 如 图中 v 表中 字段 vaccination_unit_id 和字段creation_time 分别是两个索引,执行计划中只走了 index:idx_vaccr_vaccination_unit_id(vaccination_unit_id) 一个索引,将语句修改后 又只走了 table:v, index:idx_vaccr_creation_time(creation_time)这个索引


【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

是的,只能使用一个索引。就和按照目录找章节一样,一次使用一个目录

1 个赞

你建个字段 vaccination_unit_id 和字段creation_time 的联合索引不就行了。。。。

1 个赞

执行sql语句,一个表不一定只能命中一个索引,比如or的可能同时用到2个索引,不过你这个sql只能走一个,单个字段索引过滤的数据都不多的话还是建议用联合索引

1 个赞

两个表联合查询的单SQL,只能使用一个索引

and建议使用组合索引,or的话可以看下这个参数tidb_enable_index_merge

1 个赞

and 肯定是走一个吧,如果是or不知道能不能走2个,然后合并(某些特殊场景)

是的,是可以走两个索引的。
https://docs.pingcap.com/zh/tidb/stable/explain-index-merge#开启索引合并

1 个赞

And 也可以走 index_merge 的

1 个赞

:thinking:你说的对,我写错了,我改一下。

嗯,没仔细看。。

测试了下,确实or和and都可以(开启merge的状态)

1 个赞

:handshake::handshake::handshake:那应该是没问题了。

1 个赞

可以是多个索引的

1 个赞