假设我有一个包含column_a
和column_b
的表,其中包含100k条记录。
我需要匹配column_a
或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
什么是更便宜,文本匹配或迭代?
答案 0 :(得分:3)
它还取决于列类型,列大小,数据分布,表中的其他列等。我想你太懒了,不能告诉我们所有那些乏味的细节。
通常,最快的方式是 table_b
,trigram GIN index来支持非锚定的LIKE
表达式。该指数有所不同。而查询风格将是另一个重要因素。对LIMIT 1
使用EXISTS
或table_b
。
这个密切相关答案的更多细节:
PostgreSQL LIKE query performance variations
我只是懒得写一个更详细的答案。 运行测试。:)