【问题标题】:MariaDB: varchar column size limit problem for unique indexMariaDB:唯一索引的 varchar 列大小限制问题
【发布时间】:2019-02-21 03:54:01
【问题描述】:

我在为 MariaDB 中的 300 万行表构建唯一索引时遇到问题。它有超过 50 万个我想要查找的 utf-8 字符串键。字符串必须是 utf-8,因为它们包含英语、德语、日语、西班牙语和西里尔字符。使用导致线性搜索的索引可能会太慢。

问题在于,一列中 utf-8 varchars 的最大总长度为 21,844 个字符。允许的单个字符数比使用的键数少几个数量级,并且键都是多字符。 (注意,在这种情况下,要索引的表是固定大小的。)

我没有在网上找到解决这种情况的示例。所有示例都使用多列唯一键,假设没有单个列会超出总 varchar 大小限制。

有没有办法使用 MariaDB/MySQL 来处理这个数据集?鉴于这些 SQL 数据库可以管理数亿行,应该有一种方法可以有效地索引只有 300 万行的相对较小的表。

【问题讨论】:

  • 不要在很长的字符串上添加索引,为什么不索引它的哈希值。这样可以减少索引长度。或者使用全文索引
  • 您是说该列是TEXT CHARACTER SET utf8 并且您想在其上拥有一个UNIQUE 索引?

标签: mysql indexing mariadb innodb varchar


【解决方案1】:

您可以使用generated column 来创建文本列的哈希,并在此哈希上使用create a unique index。在文本上添加部分非唯一索引另外将有助于搜索。

理论上可能发生哈希冲突,但在 300 万次中似乎不太可能。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2011-05-18
相关资源
最近更新 更多