Seven Databases in Seven Weeks(二)

PostgreSQL

聚合函数

最简单聚合函数count()
%是LIKE搜索中的通配符
min(), max()

分组
group by,告诉postgres对行进行归类,然后对这些组执行一些聚合函数
group by项有自己的过滤关键字HAVING。HAVING和WHERE子句类似,只不过它可以用聚合函数作为过滤条件(而WHERE不能)
也可以不带任何聚合函数使用group by.用select ... from .. group by 查询就能得到所有不重复的值,sql有个更简单的命令,即DISTINCT关键字。

窗口函数

PostgreSQL是少数几个实现窗口函数的开源数据库之一。
窗口函数与group by查询类似,它们允许使用对多行执行聚合函数,所不同的是,窗口函数允许使用内置的聚合函数,而不要求将每个字段分组成单行。

事务
事务保障了关系数据库的一致性。事务的准则是,要么全部成功,要么全部失败。
事务遵循ACID
Atomic,原子性,所有的操作都成功或都没有成功
Consistent, 一致性,数据将处于完整的状态,没有不一致的状态
Isolated,隔离性,事务之间不干扰
Durable,持久性,即使在服务器崩溃以后,提交的事务都是安全的

可以将任何事务的命令置于BEGIN TRANSACTION块内,可以用ROLLBACK命令终止事务。

存储过程

存储过程可以通过巨大的架构代价来取得巨大的性能优势。使用存储过程可以避免将数千行数据发送到客户端应用程序,但也让应用程序与该数据库绑定,因此,不应该轻易决定使用存储过程。

触发器

当插入或更新这样的事件发生时,触发器会自动调用存储过程。

视图
复杂查询的结果用起来和其他任何表一样,就是view的用途。与存储过程不同,他们不是执行的函数,而是查询的别名。
创建视图很简单,只要在查询前面加上“CREATE VIEW some_view_name AS”

规则
规则是对如何修改解析过的查询树的描述,Postgres每次运行一条sql语句,它将语句解析成查询树。
视图其实就是一条规则。

联表分析
数据透视表

全文检索和多维查询
在外键上创建索引以加快反向查找
在联接表上设置一个UNIQUE约束,以避免重复的联接值

SQL标准的字符串匹配
1. LIKE 和 ILIKE(不区分大小写的LIKE)是文本搜索的最简单的形式。LIKE比较列值和给定的模式字符串。%和_是通配符,%表示匹配任意数量的任何字符,而_表示只匹配一个字符。
LIKE只能用于简单的通配符
2. 正则表达式

POSIX风格正则表达式

字符串相似比较算法levenshtein
计算一个字符串经过多少步才能变成另一个字符串,从而比较两个字符串的相似程度。

三连词

TSVector和TSQuery
@@ 全文查询运算符
tsvector是一种数据类型,它将字符串分解成单词的数组(或向量),再在输入的查询字串里搜索这些单词;而tsquery则是基于某种语言的查询,每种语言对应一个相应的字典。
tsvector上的单词称为词素(lexeme)
无用词(stop word)(slor里也有啊),查询时忽略
命令 \dFd 查看系统的规则列表

对词素索引
EXPLAIN命令可以查看数据库内部对查询生成什么样的计划树
通过反向索引GIN(Generalized Inverted iNdex, GIN),对我们要查询的词素创建索引,GIN和GIST类似,也是索引的API。
EXPLAIN很重要,它可以确保按你希望方式使用索引。否则,索引只是无谓的开销。

发音码(搜索)

PostgreSQL缺点:

适合垂直扩展而不是水平扩展(可以适应单个强大的机器或集群,而不是多个并行的数据库)

你可能感兴趣的:(Database)