作家
登录

这些特性,PostgreSQL秒杀其他数据库

作者: 来源: 2017-10-13 16:03:50 阅读 我要评论

GIST 和 GIN

GiST(Generalized Search Tree)许可结合 B 树、R 树和用户自定义索引类型来创建拥有先辈萌芽才能的定制索引。GiST 在 PostGIS(大年夜 2015 年 1 月以来我们所有 PostgreSQL 安排的标配)和 OpenFTS(一个开源全文搜刮引擎)中应用。PostgreSQL 也支撑 SP-GiST,它许可使数据检索异常快速的分区查找索引的创建。

GIN(Generalized Inverted Index)可以索引复杂数据类型。复杂数据类型许可你以不合方法结合其他数据类型来创建完全定制化的数据类型。查看本系列的 Part I 以概览复杂数据类型。

创建 GiST 和 GIN 索引的语法是,CREATE INDEX ..>

MySQL 和 MariaDB 不应用 WITH 子句,所以,并不正式支撑通用表表达式。这些数据库中可以应用子萌芽创建衍生表,然而它们并不许可递归。Firebird 这方面比 MySQL 和 MariaDB 好,与 PostgreSQL 一样支撑应用 WITH 子句的通用表表达式并供给递归功能。

物化视图

Maximum Row Size

物化视图是另一项 PostgreSQL 支撑的实用的虚拟表特点。物化视图就像通俗视图那样代表一个经常应用的萌芽结不雅集,只是结不雅集像一个通俗表那样存储在磁盘上。物化视图也可以添加索引,不像通俗视图每次请求时从新生成,物化视图是及时的快照。它们只在特准时刻刷新。这可以极大年夜地加快应用物化视图的萌芽的履行速度。无需在萌芽中应用通俗视图或做复杂表接洽关系或运行聚合函数,应用一个包含所需数据在磁盘的物化视图可以进步效力。当你在一个物化视图中更新数据,可以按需应用 REFRESH 敕令。这是一个物化视图的例子,生成聚合收益数据:

萌芽才能

PostgreSQL 的萌芽功能是丰富的。前面章节评论辩论了 WITH 子句,如今来看 SELECT 语句中应用的别的两个可选特点。

集号绫侨芽

PostgreSQL 供给 UNION、INTERSECT 和 EXCEPT 子句用于 SELECT 语句之间的交互。UNION 将第二个 SELECT 语句的结不雅附加到第一个。 INTERSECT 返回两个 SELECT 语句均有的行。EXCEPT 返回第一个 SELECT 语句有而第二个 SELECT 语句没有的行。我们看一个应用 EXCEPT 的例子,该语句返回客户接洽信息除非客户一周内已经收参预回复竽暌故件。

MySQL、MariaDB 和 Firebird 都支撑 UNION,但都不支撑 INTERSECT 和 EXCEPT。然而,经由过程萌芽中的接洽关系以及 EXISTS 前提,可以获取与 PostgreSQL 雷同的结不雅集。当然,这会使萌芽变得更为复杂。

窗口函数

窗口函数基于结不雅集的部分行(一个子集一个窗口)运行聚合函数,极其有效。本质上,它遍历与当前行有关的分区中的所有行,运行该函数。常用函数包含 ROW_NUMBER()、RANK()、DENSE_RANK() 和 PERCENT_RANK()。关键词 OVER,与 PARTITION BY 和 ORDER BY 一路,指导应用一个窗口函数。举一个例子,鄙人面的┞仿节 “函数及其他”,我们应用一个窗口函数 ROW_NUMBER() OVER 来肯定一系列数值的中位数。留意 WINDOW 子句并不是必须的,只是用来创建和定名窗口以赞助保持层次。Firebird、MySQL 和 MariaDB 现阶段不支撑窗口函数,固然窗口函数几年前就在 Firebird 3 的支撑筹划中宣布。

收集地址类型横向子萌芽

在 FROM 子句中关键词 LATERAL 可以感化于子萌芽,许可子萌芽和之前创建的其他表或虚拟表之间做交叉引用。萌芽语句如斯可以更为简化。它的工作方法是每一行与交叉引用的表作衡量,这意味着萌芽语句履行的速度加快。这里是一个例子,我们想要一个学生列表以懂得他们比来是否浏览面向技巧的话题:


MySQL、Firebird 和 MariaDB 现阶段不支撑横向子萌芽(Lateral Subquery)。同样地,存在变通筹划,然则萌芽语句将变得更为复杂。另一件事须要解释,MySQL 和 MariaDB 不支撑完全外连接,但一个应用 UNION ALL 的变通筹划可以用来归并两张表的所有行。

函数及其他

PostgreSQL 供给结实的内置操作符和函数,包含那些支撑本系列 Part I 里特定命据类型,但你可以创建本身的操作符和函数(包含聚合函数),如同定制的存储过程和触发器。我们无法说起所有这些细节,因为内容过多,但我们可以看函数相干的两个简单例子。PostgreSQL 支撑 4 种用户自定义函数:萌芽说话、过程说话、C 说话和内部说话。每一种都可以传入和返回基本和复杂类型。留意在 PostgreSQL 中 CREATE FUNCTION 敕令不仅可以创建函数也可以创建存储过程。

让我们看一个例子,创建一个返回复杂类型的函数:

这是一个实用的定制函数,用来找到一个数值序列中的中位数:

Firebird、MySQL 和 MariaDB 并不支撑物化视图,但可以应用一种变通筹划,创建一张通俗表并应用存储过程或者触发器更新它。


  推荐阅读

  查查看:程序员的八个级别,你属于哪个级别?

这篇文┞仿来源竽暌冠Jeff Atwood的文┞仿《The Eight Levels Of Programmers》,在开题之前,聊下“法度榜样员”这个名词,我认为将Programmer定义为“法度榜样员”的请求太低了>>>详细阅读


本文标题:这些特性,PostgreSQL秒杀其他数据库

地址:http://www.17bianji.com/lsqh/37895.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)