Fla*_*ien 3 postgresql performance index postgresql-performance
假设我有一个表,其中有一个名为 的表上的bytea
列,我该如何:data
t
data
。我正在使用 Postgresql 9.5。
对于按前缀搜索,您只需这样做即可。困难的部分(至少从命令行)是以正确转义的方式获取要查询的二进制数据。
要在文件 blob 表中查询具有 ELF 标头的文件:
select....where data like (E'\\x7f')::bytea||'ELF%'
Run Code Online (Sandbox Code Playgroud)
对于索引它,您将遇到的主要问题是 PostgreSQL btree 索引无法索引长于页面大小 1/3(通常为 2712 字节)的值,并且一列二进制数据可能有一些超过该值的记录。您可以仅在数据的前几个字节上构建功能索引,然后对其进行查询。
create index on thing (substring(data,1,100));
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样查询它:
select....where substring(data,1,100) like (E'\\x7f')::bytea||'ELF%';
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 不够聪明,没有意识到对于匹配完整列的前缀,它大多数情况下也会匹配比列的查询前缀更长的前缀。因此,这意味着您必须针对用于构建索引的表达式编写匹配项,而不是针对列本身,否则将不会使用索引。
归档时间: |
|
查看次数: |
3504 次 |
最近记录: |