Sql 喜欢100k记录上的两列还是200k记录上的一列更快?

Sql 喜欢100k记录上的两列还是200k记录上的一列更快?,sql,performance,postgresql,database-design,indexing,Sql,Performance,Postgresql,Database Design,Indexing,假设我有一个包含列a和列b的表,其中包含100k条记录。 我需要匹配列a或列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 re

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

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

这还取决于列类型、列大小、数据分布、表中的其他列等等。我猜你只是太懒了,没有告诉我们那些无聊的细节

一般来说,最快的方法是
表b
,用a来支持非锚定的
表达式。指数起了作用。而查询样式将是另一个重要因素。利用
限制1
存在
用于
表b

在这个密切相关的答案中有更多细节:


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

它还取决于列类型、列大小、数据分布、表中的其他列等。我猜你只是太懒了,没有告诉我们那些无聊的细节

一般来说,最快的方法是
表b
,用a来支持非锚定的
表达式。指数起了作用。而查询样式将是另一个重要因素。利用
限制1
存在
用于
表b

在这个密切相关的答案中有更多细节:


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

亲爱的投票人,你能评论一下你的辛勤工作吗?不是投票人,但是“太懒了,不想写测试,所以会在这里提问”不是一个好的提问方式。不仅是“太懒了,不想写测试,所以会在这里提问…”是一个糟糕的提问方式,而且像这样的绩效问题你必须自己去尝试,因为有太多的变量会影响性能。我应该用更好的措辞——我猜否决票是因为缺乏研究。我没有否决票,但我猜这是因为你的第一行
太懒了,无法编写测试,所以我会在这里问…:)太懒了,没有写测试,所以我会在这里问……:)GIN
trigram索引仅在最新的PostgreSQL版本上受支持,您可能需要升级。你没有包括你的PostgreSQL版本,所以我不能肯定地告诉你;请查看发行说明以查看哪些版本具有适当的支持。@请注意,
GIN
trigram索引仅在最新的PostgreSQL版本上受支持,您可能需要升级。你没有包括你的PostgreSQL版本,所以我不能肯定地告诉你;查看发行说明,了解哪些版本具有适当的支持。