我在为mariadb中的300万行表构建唯一索引时遇到问题。它有超过50万个utf-8字符串键我想查一下。字符串必须是utf-8,因为它们包含英语、德语、日语、西班牙语和西里尔字符。使用导致线性搜索的索引可能会太慢。
问题是一列中utf-8 varchars的最大总长度是21844个字符。允许的单个字符数比使用的键数少几个数量级,并且这些键都是多字符的(注意,在这种情况下,要索引的表的大小是固定的。)
我在网上没有找到解决这种情况的例子。所有示例都使用多列唯一键,其中假定没有任何单个列会超出varchar的总大小限制。
对于这个数据集,有什么方法可以使用mariadb/mysql吗?考虑到这些sql数据库可以管理数亿行,应该有一种方法可以有效地索引一个只有300万行的相对较小的表。
1条答案
按热度按时间c9x0cxw01#
可以使用生成的列创建文本列的哈希,并在此哈希上创建唯一索引。另外,在文本上添加部分非唯一索引将有助于搜索。
哈希的碰撞理论上是可能的,但在300万次中似乎不太可能。