nou*_*ine 3 postgresql indexing database-design pattern-matching postgresql-performance
我character varying在 postgres 中有一个字段,其中包含一组以 1 个空格分隔的字符串。例如:
--> one two three <----> apples bananas pears <--我放置-->并<--显示字符串开始和结束的位置(它们不是存储字符串本身的一部分)
我需要查询此字段以查明整个字符串是否包含某个单词(例如 apple)。一个可能的查询是
SELECT * FROM table WHERE thefield LIKE '%apple%'
Run Code Online (Sandbox Code Playgroud)
但它很糟糕并且不会扩展,因为 b-tree 索引仅在模式附加到字符串的开头时才扩展,而在我的情况下,搜索的字符串可以定位在字段中的任何位置。
你建议如何解决这个问题?
首先考虑数据库规范化。
在使用您当前的设计时,使用trigram index支持查询,这将非常快。
这个密切相关的答案中的更多细节和链接:
PostgreSQL LIKE 查询性能变化
在 dba.SE 上的这个相关答案中,更多关于模式匹配和索引的信息:
Pattern matching with LIKE、SIMILAR TO 或 PostgreSQL 中的正则表达式
| 归档时间: |
|
| 查看次数: |
2510 次 |
| 最近记录: |