一条记录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 个赞
不支持的。
目前是不支持的,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 分钟后被自动关闭。不再允许新回复。