sql - LIKE 100k 记录上的 2 列或 200k 记录上的一列更快吗?

标签 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

哪个更便宜,文本匹配还是迭代?

最佳答案

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

通常,最快的方法是使用 trigram GIN indextable_b支持 unanchored LIKE 表达式。指数有所不同。而查询风格将是另一个重要因素。对 table_b 使用 LIMIT 1EXISTS

这个密切相关的答案中有更多详细信息:
PostgreSQL LIKE query performance variations

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

关于sql - LIKE 100k 记录上的 2 列或 200k 记录上的一列更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092949/

相关文章:

javascript - 在 Knex 迁移中为现有行设置默认的 notNullable 引用列

mysql - SQL 请求 HTTP 范围响应 header

mysql - 不丢失数据更新MySql表相关记录关系

mysql - 如何在MYSQL中创建不同类型的ID?

C++ 主循环偶尔会卡顿

algorithm - 寻找素数的快速算法?

mysql - SQL insert using RAND() for inserting random value - INSERT into TINYINT?

sql - 将查询扩展到 WHERE 子句中指定的范围之外

node.js - Nodejs 每秒请求数和并发调用数

postgresql - Postgres - 如何将输出返回到终端?