Skip to content

Commit

Permalink
新增草稿
Browse files Browse the repository at this point in the history
  • Loading branch information
吴浩麟 committed May 12, 2020
1 parent d0bbc5c commit af61810
Showing 1 changed file with 28 additions and 1 deletion.
29 changes: 28 additions & 1 deletion source/_drafts/PostgreSQL中文检索与性能优化.md
@@ -1,4 +1,4 @@
检索数据库中的条目在大多数系统都会用到,实现的方法也很多,常见的包括
检索数据库中的条目是很基本常见的功能,实现的方法也很多,常见包括

1. 基于[Elasticsearch](https://www.elastic.co/cn/elasticsearch)[Lucene](https://lucene.apache.org)这类专业独立的检索引擎实现
2. 基于数据库自带的检索功能实现
Expand Down Expand Up @@ -101,8 +101,35 @@ CREATE EXTENSION pg_trgm


## 如何优化检索性能
在PostgresSQL里提升查询性能最有效地方式是使用索引,针对不同检索方式需要用不同索引来优化,先来看下内置的各种索引和其特点:

### B树(B-tree,Balanced tree)索引
B树索引是使用范围最广的索引,也是执行`CREATE INDEX`时默认使用的索引,几乎所有的数据库都支持B树索引。
B树索引可以有效地用于等值和范围查询,并且也可以用于检索NULL值,排序。

B树索引适用于前匹配的LIKE检索,例如`权力的%`,但不能用于`%权力的``%权力的%`,原因在于只有前匹配才能建立B-tree。

### 哈希(Hash)索引
哈希索引原理就像map一样对数据进行KV映射,因此只在等值比较时才有用,但它性能非常好。

### 倒排(GIN,Generalized Inverted Indexes)索引
倒排索引以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
倒排索引的结构图如下图:
![倒排索引的结构图](http://p1.meituan.net/scarlett/c1e37cd57d638f3a18a76510c8fb016b17980.png)
由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以非常适用用于索引数组值。

### 广义搜索树(GiST,Generalized Search Tree)索引

- PostgresSQL常用索引和适用场景
- 不同检索方式该用什么索引
通用搜索树索引允许你建立普通平衡树结构,也能用于等值和范围比较之外的操作。它们用于索引几何数据类型,也可用于全文搜索。

## 四种检索方法对比与适用场景总结

| 索引类型 | 适用场景 |
| ---- | ---- |
| B-tree | 单元格 |
| Hash | 单元格 |
| GIN | 单元格 |
| GiST | 单元格 |

0 comments on commit af61810

Please sign in to comment.