Mik*_*iss 5 postgresql performance index index-tuning postgresql-performance
我有一个昂贵的定期 PostgreSQL 9.3 查询,格式如下:
SELECT * from mytable where name NOT LIKE '%foo%';
Run Code Online (Sandbox Code Playgroud)
foo这里实际上是一个永远不会改变的常数。查询开销很大,因为它需要表扫描。我希望实际上只有几行与查询匹配,所以我想使用部分索引来加快查询速度。
CREATE INDEX foo_idx ON mytable ((name NOT LIKE '%foo%')) WHERE name NOT LIKE '%foo%';
Run Code Online (Sandbox Code Playgroud)
但是,当我执行EXPLAIN查询时,它仍然使用顺序扫描而不是依赖新索引。 我究竟做错了什么?
我在CREATE INDEX语句的括号表达式子句中尝试了几种不同的表达式,但没有任何帮助:
CREATE INDEX foo_idx ON mytable (name) WHERE name NOT LIKE '%foo%';
CREATE INDEX foo_idx ON mytable ((name LIKE '%foo%')) WHERE name NOT LIKE '%foo%';
Run Code Online (Sandbox Code Playgroud)
我也尝试删除WHERE索引的子句,但这也无济于事。
您可以尝试稍微不同的方法。
CREATE INDEX foo_idx ON mytable (strpos(name,'foo'));
SELECT * from mytable where strpos(name,'foo') = 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2729 次 |
| 最近记录: |