能支持多值索引吗?

一条记录user_ids字段记录了两个user_id, 逗号分隔, 如: 123,456
类似pgsql的数组类型, 用GIN索引后, 用any来查 123 = any(user_ids)

试试函数索引呢

mysql> select @@tidb_allow_function_for_expression_index;
+--------------------------------------------+
| @@tidb_allow_function_for_expression_index |
+--------------------------------------------+
| lower, md5, reverse, upper, vitess_hash    |
+--------------------------------------------+

应该解决不了他说的问题吧

1 个赞

Generalized Inverted Index是PG的特性,tidb暂时不支持这种用法。

我是想存入多个值到user_ids字段, 然后按照某个值能高效检索出相关的记录, pgsql我使用gin类型索引做到了, 正在调研tidb, 特来请教

你这个需求,在MySQL类型的数据库中,应该都不支持,没有这类索引。

1 个赞

不支持的。

https://asktug.com/c/advice-feedback/requirements 如果这是一个新需求的话,可以到这里来提

目前是不支持的,MySQL应该也不支持

1 个赞

设计问题,不能让数据库来解决。如果你有1000个逗号连接呢?

1 个赞

话别说那么绝对, 得看真实情况, 实际上每条数据只有2-10个user_id
pgsql上建个索引就跑的很好, 5000w的数据
mysql上就得建立另一个冗余的表里来记录索引, 得上好几亿

1 个赞

我见过几千几万的。要不然也不会说。其实这都是设计上的问题。

1 个赞

您说的大概是点赞,收藏,粉丝等社交场景
在我的业务里面, user_id数量是严格控制在不超过10个,所以pgsql上的gin类型的索引跑的不错, 所以询问tidb有没有类似的解决办法.
看来我可以提一个新需求试试…

1 个赞

试了下mysql8的Multi-Valued Indexes, 不知道为什么, 不是预期的效果, 而且检索出来的数据不符合预期, 很奇怪

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。