sin*_*ish 6 postgresql full-text-search full-text-indexing
我有一个包含许多测试字段的查询,如下所示:
SELECT * FROM some-table
WHERE field1 ILIKE "%thing%"
OR field2 ILIKE "%thing"
OR field3 ILIKE "%thing";
Run Code Online (Sandbox Code Playgroud)
列几乎都是varchar(50)或左右.现在我理解提高性能我应该索引搜索操作的字段.我应该考虑完全用TSEARCH替换ILIKE吗?
Ric*_*ton 15
全文搜索设置与"包含"类似查询不同.它源于单词等,所以你可以匹配"汽车"与"汽车".
如果你真的想要一个快速的ILIKE,那么没有标准的数据库索引或FTS会有所帮助.幸运的是,pg_trgm模块可以做到这一点.
有一点非常重要:没有B-TREE INDEX会改进这种搜索:
where field ilike '%SOMETHING%'
Run Code Online (Sandbox Code Playgroud)
我的意思是,如果你这样做:
create index idx_name on some_table(field);
Run Code Online (Sandbox Code Playgroud)
您将改进的唯一途径是where field like 'something%'.(当您搜索以某些文字开头的值时).因此,field在这种情况下,通过向列添加常规索引,您将无法获益.
如果您需要提高搜索响应时间,请务必考虑使用FULL TEXT SEARCH.
| 归档时间: |
|
| 查看次数: |
4789 次 |
| 最近记录: |