postgres:全文搜索:查找重复的文本行的最快方法?

时间:2019-10-05 19:35:01

标签: postgresql

:-)

最快的方法是在表中查找重复的文本,即表中的行在一行中具有至少在整个表中出现两次的文本?该表包含超过1.6亿行。

我有一个表,其中包含以下列:idmaintextmaintext_token,其中to_tsvector(maintext);是由maintext_token创建的。此外,我在create index idx_maintext_tokens on tablename using gin(maintext_token);上创建了一个GIN索引,即id

当前,我正在使用以下内容,但是,这需要花费相当长的时间: 我有一个表,其中包含以下列:maintextmaintext_tokento_tsvector(maintext);,其中maintext_token是由create index idx_maintext_tokens on tablename using gin(maintext_token);创建的。此外,我在select maintext, count(maintext) from ccnc group by maintext having count(maintext)>1 order by maintext; 上创建了一个GIN索引,即maintext

maintext_token

我也尝试执行相同的操作,但没有使用select maintext_token, count(maintext_token) from ccnc group by maintext_token having count(maintext_token)>1 order by maintext_token; ,而是使用{{1}}列进行比较:

{{1}}

尽管我期望至少第二个查询要快得多,但这两个查询似乎都运行了很长时间,因为postgres可以使用索引进行比较。

在此先感谢您提供任何见解! 干杯:)

1 个答案:

答案 0 :(得分:0)

您说要测试是否相等,因此您可能希望对文本进行散列,然后搜索散列。您可以使用哈希索引,也可以为文本的哈希索引。我最近在一个相关问题上获得了一些帮助,您可以在此处找到详细信息和比较:

Searching on expression indexes