SQL: 获取所有匹配字符串的行,如何提高性能?

SQL: Get all rows with matching string, how can I improve performance?

我正在构建一个允许用户在网页上创建评论的小应用程序。它的工作方式是将 origin 与要添加到页面的评论一起发送,然后通过查询 WHERE origin LIKE 'https://somesite.com/page-1'.

获取页面的所有评论

id 是唯一的,但 origin 显然不是,因为特定页面可能有多个评论。

 table_name | column_name |          data_type
------------+-------------+-----------------------------
 Comment    | id          | text
 Comment    | origin      | text
 Comment    | body        | text

到目前为止,这工作得很好,但数据库仍然相对较小。我没有看到这种缩放效果很好,但我不确定如何改进它。

我最初的想法是为每个添加的新站点即时创建上述 table 的不同副本,但这听起来像是一场噩梦,以防我需要将更改部署到我的模式。

遇到这种情况我该如何处理?我的数据库架构应该是什么样子?

这个条件:

WHERE origin LIKE 'https://somesite.com/page-1'

相当于:

WHERE origin = 'https://somesite.com/page-1'

为了平等,您可以在 origin:

上使用常规的 B 树索引
CREATE INDEX idx_comment_origin ON comment(origin);

要使用 LIKE 进行更复杂的比较,您可以使用 GIN index,但这对于您问题中的示例来说不是必需的。