0

假设我有一个带有column_aand的表column_b,其中包含 100k 条记录。我需要匹配column_aOR column_b

创建一个只包含要匹配的一列但记录两倍的新表会更快吗?
而不是这个:

table_a

id  column_a  column_b
--  --------  --------
1   foo       bar

SELECT ... WHERE "column_a" LIKE '%blah%' OR "column_b" LIKE '%blah%'
# will iterate through 100k records

我要这个:

table_b

id  column
--  ------
1   foo
2   bar

SELECT ... WHERE "column" LIKE '%blah%'
# will iterate through 200k records

什么更便宜,文本匹配还是迭代?

4

1 回答 1

3

它还取决于列类型、列大小、数据分布、表中的其他列等等。我猜你只是懒得告诉我们所有那些乏味的细节。

通常,最快的方法是table_b使用三元组GIN 索引来支持非锚定LIKE表达式。指数有所作为。查询风格将是另一个重要因素。利用LIMIT 1或。EXISTS_table_b

这个密切相关的答案中的更多细节:
PostgreSQL LIKE query performance changes

我只是懒得写更详细的答案。运行测试。:)

于 2013-04-18T22:28:22.847 回答