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,但这对于您问题中的示例来说不是必需的。
我正在构建一个允许用户在网页上创建评论的小应用程序。它的工作方式是将 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
:
CREATE INDEX idx_comment_origin ON comment(origin);
要使用 LIKE
进行更复杂的比较,您可以使用 GIN index,但这对于您问题中的示例来说不是必需的。