我们正在设计一个众所周知的读取量大的系统(每分钟读取数万次)。
names
作为一种中央注册表。每行都有一个text
字段representation
和一个唯一的字段,key
它是该字段的 MD5 哈希值representation
。1该表目前有数千万条记录,预计在应用程序的生命周期内会增长到数十亿条。names
表。这些表之一中的任何给定记录都保证有一个name_key
,它在功能上是names
表的外键。1:顺便说一句,正如您所料,此表中的记录一旦写入便不可变。
对于表以外的任何给定表names
,最常见的查询将遵循以下模式:
SELECT list, of, fields
FROM table
WHERE name_key IN (md5a, md5b, md5c...);
Run Code Online (Sandbox Code Playgroud)
我想优化读取性能。我怀疑我的第一站应该是最小化索引的大小(尽管我不介意在那里被证明是错误的)。
问题:和列
的最佳数据类型是什么?
有理由使用over吗?或者?key
name_key
hex(32)
bit(128)
BTREE
GIN