我在postgresql表中有一个文本列,我需要经常和非常快速地寻找精确匹配。这是英文或中文的文本列,其长度通常为短句或段落。
我最好的选择是什么?一个“哪里”查询?我将如何为该列编制索引?
编辑: 我的数据库迁移导致错误:
execute "CREATE INDEX idx_src ON translate_logs USING btree (src);"
Caused by:
PG::ProgramLimitExceeded: ERROR: index row size 2936 exceeds maximum 2712 for index "idx_src"
HINT: Values larger than 1/3 of a buffer page cannot be indexed.
Consider a function index of an MD5 hash of the value, or use full text indexing.
答案 0 :(得分:0)
不确定这是最好的答案,而是回答我到目前为止的内容:
我创建了一个迁移,该迁移的MD5哈希值索引为:
execute "CREATE INDEX idx_src ON translate_logs ((md5(src)));"
这是我在列中搜索完全匹配的方式。
TranslateLog.where('md5(src) = md5(?)', text)
很高兴听到更好的答案