我必须编写一个简单的查询,在其中查找以 B 或 D 开头的人名:
SELECT s.name
FROM spelers s
WHERE s.name LIKE 'B%' OR s.name LIKE 'D%'
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法重写它以提高性能。所以我可以避免or和/或like?
postgresql index regular-expression pattern-matching string-searching
例如,假设我有一个中等行数(约 100,000 行)的表,其中一jsonb列包含以下示例数据:
{"name":"Bob", "favoriteColor":"red", "someOtherObject": {"somethingElse": true}}
Run Code Online (Sandbox Code Playgroud)
是否更有效:
在 jsonb 列上使用 GIN 索引,然后使用 Postgres 的内置 JSON 查询函数来提取数据
创建多列来表示可以搜索的内容,即一列用于name,一列用于favoriteColor等;在这些列上构建 b 树索引,然后运行select document from table where name = 'Bob'
一些其他的解决方案?
请记住,解决方案需要有效地支持like查询,以便能够搜索以给定输入字符串开头的值。