【发布时间】:2018-05-08 01:12:55
【问题描述】:
我的主表有一个用于搜索查询的列。 一个简化的例子:
查询表
id query
1 hello new york
2 no information here
3 madison festival
地理位置
id suburb postcode
11 new york 123
12 brooklyn 345
13 madison 999
如果搜索查询有位置,我想在示例结果中检索邮政编码,如下所示:
id query suburb postcode
1 hello new york new york 123
3 madison festival madison 999
我目前正在通过 SQL 执行此操作并返回所需的结果(几乎:如果 `inform' 是一个郊区,它将被检索到,尽管我们想要匹配完整的单词)。
SELECT QT.id, query, suburb, postocde
FROM Querytable as QT
INNER JOIN Geotable ON query LIKE concat('%',suburb,'%');
由于上述表格很大,我该如何改进这个查询?或者有没有更好的方法来解决这个问题?
【问题讨论】:
-
你不能使用像
LIKE CONCAT('suburb, '%')这样的东西 - 你的查询将能够使用索引(sargable)。您可以使用COMPUTED列来大写evertything - 即纽约变成纽约 - 更容易搜索! PostgreSQL 有这些。 -
@Vérace:不,遗憾的是 Postgres 没有计算列。
-
@a_horse_with_no_name 感谢您的提醒 - Postgres 团队绝对应该考虑他们 - 他们是天赐之物。您也可以使用
TRIGGER或使用VIEW和SELECTing 来实现!
标签: sql postgresql performance