在100k记录上LIKE 2列或200k记录上的一列是否更快?

时间:2013-04-18 20:58:07

标签: sql performance postgresql database-design indexing

假设我有一个包含column_acolumn_b的表,其中包含100k条记录。 我需要匹配column_acolumn_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

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

1 个答案:

答案 0 :(得分:3)

它还取决于列类型,列大小,数据分布,表中的其他列等。我想你太懒了,不能告诉我们所有那些乏味的细节。

通常,最快的方式是 table_b trigram GIN index来支持非锚定的LIKE表达式。该指数有所不同。而查询风格将是另一个重要因素。对LIMIT 1使用EXISTStable_b

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

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