tidb可以同时创建多个不同表的索引吗

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】tidb可以同时创建多个不同表的索引吗?有没有参数控制?
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

TiDB 目前不支持同时为多个不同表创建索引。创建索引时有以下几个限制:

  1. 不支持同时添加多个索引。每次只能添加一个索引
  2. 创建索引时会消耗大量资源,建议在业务低峰期进行
  3. 创建索引时可能会与频繁更新的字段冲突,影响应用性能
  4. TiDB 不支持 FULLTEXT、HASH 和 SPATIAL 类型的索引
  5. TiDB 不支持降序索引(与 MySQL 5.7 类似)
  6. 不支持向表中添加 CLUSTERED 类型的主键

虽然没有直接控制同时创建多个索引的参数,但有一些相关的配置可以影响索引创建:

  1. tidb_enable_dist_task: 这个系统变量控制是否启用分布式任务。如果启用,请确保集群中每个 TiDB 节点的临时目录有足够的磁盘空间
  2. allow-expression-index: 这个配置选项控制是否允许创建表达式索引

2.这里深有体会,对于组合索引容量增长比例很大

貌似应该是不支持的。感觉也没有这种场景吧,难道是分库分表?

不支持

不可以,索引是一个队列,只能一次执行一个,想快点加索引就改并行参数,会快非常多

1 个赞

多个客户端并行提交,串行执行吧。
索引创建条列是由一个个执行的。


两个会话可以同时执行创建索引的语句,不会报错;但是执行是串行的,session A先执行,session B后执行,session B需要等session A执行完成后,session B才能执行。

1 个赞

可以同时提交创建索引的SQL语句,但是这些创建索引的SQL会被加入到一个add index queue中,然后串行执行

楼上说的索引加速应该是指这个吧,不是语句并行。
image

不支持