12.9. GIN 和 GiST 索引类型

有两种索引可以被用来加速全文搜索。注意全文搜索并非一定需要索引,但是在一个定期会被搜索的列上,通常需要有一个索引。

CREATE INDEX name ON table USING GIN(column);

创建一个基于 GIN(通用倒排索引)的索引。column必须是tsvector类型。

CREATE INDEX name ON table USING GIST(column);

创建一个基于 GiST(通用搜索树)的索引。column可以是tsvectortsquery类型。

GIN 索引是更好的文本搜索索引类型。作为倒排索引,每个词(词位)在 其中都有一个索引项,其中有压缩过的匹配位置的列表。多词搜索可以找到 第一个匹配,然后使用该索引移除缺少额外词的行。GIN 索引只存储 tsvector值的词(词位),并且不存储它们的权重标签。因此, 在使用涉及权重的查询时需要一次在表行上的重新检查。

一个 GiST 索引是有损的,这表示索引可能产生假匹配,并且有必要检查真实的表行来消除这种假匹配(PostgreSQL在需要时会自动做这一步)。GiST 索引之所以是有损的,是因为每一个文档在索引中被表示为一个定长的签名。该签名通过哈希每一个词到一个 n 位串中的一个单一位来产生,通过将所有这些位 OR 在一起产生一个 n 位的文档签名。当两个词哈希到同一个位位置时就会产生假匹配。如果查询中所有词都有匹配(真或假),则必须检索表行查看匹配是否正确。

有损性导致的性能下降归因于不必要的表记录(即被证实为假匹配的记录)获取。因为表记录的随机访问是较慢的,这限制了 GiST 索引的可用性。假匹配的可能性取决于几个因素,特别是唯一词的数量,因此推荐使用词典来缩减这个数量。

注意GIN索引的构件时间常常可以通过增加maintenance_work_mem来改进,而GiST索引的构建时间则与该参数无关。

对大集合分区并正确使用 GIN 和 GiST 索引允许实现带在线更新的快速搜索。分区可以在数据库层面上使用表继承来完成,或者是通过将文档分布在服务器上并使用dblink收集结果。后者是可能的,因为排名函数只使用本地信息。

本文转自PostgreSQL中文社区,原文链接:12.9. GIN 和 GiST 索引类型

PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.9. GIN 和 GiST 索引类型相关推荐

  1. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.5. 修改表

    5.5. 修改表 5.5.1. 增加列5.5.2. 移除列5.5.3. 增加约束5.5.4. 移除约束5.5.5. 更改列的默认值5.5.6. 修改列的数据类型5.5.7. 重命名列5.5.8. 重命 ...

  2. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较

    9.23. 行和数组比较 9.23.1. IN9.23.2. NOT IN9.23.3. ANY/SOME (array)9.23.4. ALL (array)9.23.5. 行构造器比较9.23.6 ...

  3. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 14 章 性能提示_14.1. 使用EXPLAIN

    14.1. 使用EXPLAIN 14.1.1. EXPLAIN基础 14.1.2. EXPLAIN ANALYZE 14.1.3. 警告 PostgreSQL为每个收到查询产生一个查询计划. 选择正确 ...

  4. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 11 章 索引_11.11. 只用索引的扫描

    11.11. 只用索引的扫描 PostgreSQL中的所有索引都是二级索引,表示每一个索引都被存储在表的主数据区域(在PostgreSQL术语中被称为该表的堆)之外.这意味着在一次普通索引扫描中,每次 ...

  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.4. 字符串函数和操作符...

    9.4. 字符串函数和操作符 9.4.1. format 本节描述了用于检查和操作字符串值的函数和操作符.在这个环境中的串包括所有类型character.character varying和text的 ...

  6. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.10. 位串类型

    8.10. 位串类型 位串就是一串 1 和 0 的串.它们可以用于存储和可视化位掩码.我们有两种类型的 SQL 位类型:bit(n)和bit varying(n),其中 n是一个正整数. bit类型的 ...

  7. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.4. 额外特性

    12.4. 额外特性 12.4.1. 操纵文档12.4.2. 操纵查询12.4.3. 用于自动更新的触发器12.4.4. 收集文档统计数据 这一节描述在文本搜索中有用的一些额外的函数和操作符. 12. ...

  8. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.11. 外部数据

    5.11. 外部数据 PostgreSQL实现了部分的SQL/MED规定,允许我们使用普通SQL查询来访问位于PostgreSQL之外的数据.这种数据被称为外部数据(注意这种用法不要和外键混淆,后者是 ...

  9. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.15. JSON 函数和操作符...

    9.15. JSON 函数和操作符 表 9.43展示了可以用于两种 JSON 数据类型(见第 8.14 节)的操作符. 表 9.43. json和jsonb 操作符 操作符 右操作数类型 描述 例子 ...

最新文章

  1. rust腐蚀 木制窗户怎么修_装修窗帘怎么选最划算?记住这3点,至少能省大几千...
  2. C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse
  3. 为什么java抗并发_用最通熟易懂的话说明,为什么要使用java并发编程
  4. fastapi 查询参数和字符串校验 / 路径参数和数值校验
  5. 【VBS】IE11如何运行 Visual Basic Script 程序
  6. python示例_Python中的缩进示例
  7. 用javascript代码拼html
  8. Android Studio 技巧
  9. html 滑动导航效果,jQuery实现的滑块滑动导航效果示例
  10. android11电视,谷歌发布首款Android TV版 基于Android 11开发者预览版
  11. mysql 表的存储类型_MySQL的表类型和存储引擎
  12. 精益创业实战 - 第3章 制作自己的精益画布
  13. 1、NESSUS安装
  14. 异步方法中取消异步操作
  15. [USACO题库]1.2.3 Name That Number命名那个数字
  16. 华为认证数据库工程师HCIA-GaussDB V1.5(中文版)发布通知
  17. PDF分割与合并(充分利用Spire的bug实现操作PDF)
  18. (与运算)、|(或运算)、^(异或运算)等运算符的解释与运用
  19. 如何从 SQL Server 中的 SELECT 更新?
  20. 共享红色理念创业计划书PPT模板

热门文章

  1. 给Qt程序加上版本信息
  2. [leetcode]Sort Colors
  3. jsoncpp 不能处理long类型数据
  4. 关于JAVA的参数列表传值的问题
  5. 教你如何保养iphone电池
  6. 再学Android之多线程
  7. [译] Security Token 生态 — 项目指南
  8. 2018CTF大赛学习
  9. switch case 支持的 6 种数据类型!
  10. LoadRunner测试结果分析