
正文
postgresql书知乎的简单介绍
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
postgresql 建立索引
一、索引的类型:
PostgreSQL提供了多种索引类型:B-Tree、Hash、GiST和GIN,由于它们使用了不同的算法,因此每种索引类型都有其适合的查询类型,缺省时,CREATE INDEX命令将创建B-Tree索引。
1. B-Tree:
CREATE TABLE test1 (
id integer,
content varchar
);
CREATE INDEX test1_id_index ON test1 (id);
B-Tree索引主要用于等于和范围查询,特别是当索引列包含操作符" 、=和"作为查询条件时,PostgreSQL的查询规划器都会考虑使用B-Tree索引。在使用BETWEEN、IN、IS NULL和IS NOT NULL的查询中,PostgreSQL也可以使用B-Tree索引。然而对于基于模式匹配操作符的查询,如LIKE、ILIKE、~和 ~*,仅当模式存在一个常量,且该常量位于模式字符串的开头时,如col LIKE 'foo%'或col ~ '^foo',索引才会生效,否则将会执行全表扫描,如:col LIKE '%bar'。
2. Hash:
CREATE INDEX name ON table USING hash (column);
散列(Hash)索引只能处理简单的等于比较。当索引列使用等于操作符进行比较时,查询规划器会考虑使用散列索引。
这里需要额外说明的是,PostgreSQL散列索引的性能不比B-Tree索引强,但是散列索引的尺寸和构造时间则更差。另外,由于散列索引操作目前没有记录WAL日志,因此一旦发生了数据库崩溃,我们将不得不用REINDEX重建散列索引。
3. GiST:
GiST索引不是一种单独的索引类型,而是一种架构,可以在该架构上实现很多不同的索引策略。从而可以使GiST索引根据不同的索引策略,而使用特定的操作符类型。
4. GIN:
GIN索引是反转索引,它可以处理包含多个键的值(比如数组)。与GiST类似,GIN同样支持用户定义的索引策略,从而可以使GIN索引根据不同的索引策略,而使用特定的操作符类型。作为示例,PostgreSQL的标准发布中包含了用于一维数组的GIN操作符类型,如:、=、等。
二、复合索引:
PostgreSQL中的索引可以定义在数据表的多个字段上,如:
CREATE TABLE test2 (
major int,
minor int,
name varchar
}
CREATE INDEX test2_mm_idx ON test2 (major, minor);
1. B-Tree类型的复合索引:
在B-Tree类型的复合索引中,该索引字段的任意子集均可用于查询条件,不过,只有当复合索引中的第一个索引字段(最左边)被包含其中时,才可以获得最高效率。
2. GiST类型的复合索引:
在GiST类型的复合索引中,只有当第一个索引字段被包含在查询条件中时,才能决定该查询会扫描多少索引数据,而其他索引字段上的条件只是会限制索引返回的条目。假如第一个索引字段上的大多数数据都有相同的键值,那么此时应用GiST索引就会比较低效。
3. GIN类型的复合索引:
与B-Tree和GiST索引不同的是,GIN复合索引不会受到查询条件中使用了哪些索引字段子集的影响,无论是哪种组合,都会得到相同的效率。
使用复合索引应该谨慎。在大多数情况下,单一字段上的索引就已经足够了,并且还节约时间和空间。除非表的使用模式非常固定,否则超过三个字段的索引几乎没什么用处。
三、组合多个索引:
PostgreSQL可以在查询时组合多个索引(包括同一索引的多次使用),来处理单个索引扫描不能实现的场合。与此同时,系统还可以在多个索引扫描之间组成AND和OR的条件。比如,一个类似WHERE x = 42 OR x = 47 OR x = 53 OR x = 99的查询,可以被分解成四个独立的基于x字段索引的扫描,每个扫描使用一个查询子句,之后再将这些扫描结果OR在一起并生成最终的结果。另外一个例子是,如果我们在x和y上分别存在独立的索引,那么一个类似WHERE x = 5 AND y = 6的查询,就会分别基于这两个字段的索引进行扫描,之后再将各自扫描的结果进行AND操作并生成最终的结果行。
为了组合多个索引,系统扫描每个需要的索引,然后在内存里组织一个BITMAP,它将给出索引扫描出的数据在数据表中的物理位置。然后,再根据查询的需要,把这些位图进行AND或者OR的操作并得出最终的BITMAP。最后,检索数据表并返回数据行。表的数据行是按照物理顺序进行访问的,因为这是位图的布局,这就意味着任何原来的索引的排序都将消失。如果查询中有ORDER BY子句,那么还将会有一个额外的排序步骤。因为这个原因,以及每个额外的索引扫描都会增加额外的时间,这样规划器有时候就会选择使用简单的索引扫描,即使有多个索引可用也会如此。
四、唯一索引:
CREATE UNIQUE INDEX name ON table (column [, ...]);
五、表达式索引:
表达式索引主要用于在查询条件中存在基于某个字段的函数或表达式的结果与其他值进行比较的情况,如:
SELECT * FROM test1 WHERE lower(col1) = 'value';
此时,如果我们仅仅是在col1字段上建立索引,那么该查询在执行时一定不会使用该索引,而是直接进行全表扫描。如果该表的数据量较大,那么执行该查询也将会需要很长时间。解决该问题的办法非常简单,在test1表上建立基于col1字段的表达式索引,如:
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
SELECT * FROM people WHERE (first_name || ' ' || last_name) = 'John Smith';
和上面的例子一样,尽管我们可能会为first_name和last_name分别创建独立索引,或者是基于这两个字段的复合索引,在执行该查询语句时,这些索引均不会被使用,该查询能够使用的索引只有我们下面创建的表达式索引。
CREATE INDEX people_names ON people ((first_name || ' ' || last_name));
CREATE INDEX命令的语法通常要求在索引表达式周围书写圆括弧,就像我们在第二个例子里显示的那样。如果表达式只是一个函数调用,那么可以省略,就像我们在第一个例子里显示的那样。
从索引维护的角度来看,索引表达式要相对低效一些,因为在插入数据或者更新数据的时候,都必须为该行计算表达式的结果,并将该结果直接存储到索引里。然而在查询时,PostgreSQL就会把它们看做WHERE idxcol = 'constant',因此搜索的速度等效于基于简单索引的查询。通常而言,我们只是应该在检索速度比插入和更新速度更重要的场景下使用表达式索引。
六、部分索引:
部分索引(partial index)是建立在一个表的子集上的索引,而该子集是由一个条件表达式定义的(叫做部分索引的谓词)。该索引只包含表中那些满足这个谓词的行。
由于不是在所有的情况下都需要更新索引,因此部分索引会提高数据插入和数据更新的效率。然而又因为部分索引比普通索引要小,因此可以更好的提高确实需要索引部分的查询效率。见以下三个示例:
1. 索引字段和谓词条件字段一致:
CREATE INDEX access_log_client_ip_ix ON access_log(client_ip)
WHERE NOT (client_ip inet '192.168.100.0' AND client_ip inet '192.168.100.255');
下面的查询将会用到该部分索引:
SELECT * FROM access_log WHERE url = '/index.html' AND client_ip = inet '212.78.10.32';
下面的查询将不会用该部分索引:
一个不能使用这个索引的查询可以是
SELECT * FROM access_log WHERE client_ip = inet '192.168.100.23';
2. 索引字段和谓词条件字段不一致:
PostgreSQL支持带任意谓词的部分索引,唯一的约束是谓词的字段也要来自于同样的数据表。注意,如果你希望你的查询语句能够用到部分索引,那么就要求该查询语句的条件部分必须和部分索引的谓词完全匹配。 准确说,只有在PostgreSQL能够识别出该查询的WHERE条件在数学上涵盖了该索引的谓词时,这个部分索引才能被用于该查询。
CREATE INDEX orders_unbilled_index ON orders(order_nr) WHERE billed is not true;
下面的查询一定会用到该部分索引:
SELECT * FROM orders WHERE billed is not true AND order_nr 10000;
那么对于如下查询呢?
SELECT * FROM orders WHERE billed is not true AND amount 5000.00;
这个查询将不像上面那个查询这么高效,毕竟查询的条件语句中没有用到索引字段,然而查询条件"billed is not true"却和部分索引的谓词完全匹配,因此PostgreSQL将扫描整个索引。这样只有在索引数据相对较少的情况下,该查询才能更有效一些。
下面的查询将不会用到部分索引。
SELECT * FROM orders WHERE order_nr = 3501;
3. 数据表子集的唯一性约束:
CREATE TABLE tests (
subject text,
target text,
success boolean,
...
);
CREATE UNIQUE INDEX tests_success_constraint ON tests(subject, target) WHERE success;
该部分索引将只会对success字段值为true的数据进行唯一性约束。在实际的应用中,如果成功的数据较少,而不成功的数据较多时,该实现方法将会非常高效。
七、检查索引的使用:
见以下四条建议:
1. 总是先运行ANALYZE。
该命令将会收集表中数值分布状况的统计。在估算一个查询返回的行数时需要这个信息,而规划器则需要这个行数以便给每个可能的查询规划赋予真实的开销值。如果缺乏任何真实的统计信息,那么就会使用一些缺省数值,这样肯定是不准确的。因此,如果还没有运行ANALYZE就检查一个索引的使用状况,那将会是一次失败的检查。
2. 使用真实的数据做实验。
用测试数据填充数据表,那么该表的索引将只会基于测试数据来评估该如何使用索引,而不是对所有的数据都如此使用。比如从100000行中选1000行,规划器可能会考虑使用索引,那么如果从100行中选1行就很难说也会使用索引了。因为100行的数据很可能是存储在一个磁盘页面中,然而没有任何查询规划能比通过顺序访问一个磁盘页面更加高效了。与此同时,在模拟测试数据时也要注意,如果这些数据是非常相似的数据、完全随机的数据,或按照排序顺序插入的数据,都会令统计信息偏离实际数据应该具有的特征。
3. 如果索引没有得到使用,那么在测试中强制它的使用也许会有些价值。有一些运行时参数可以关闭各种各样的查询规划。
4. 强制使用索引用法将会导致两种可能:一是系统选择是正确的,使用索引实际上并不合适,二是查询计划的开销计算并不能反映现实情况。这样你就应该对使用和不使用索引的查询进行计时,这个时候EXPLAIN ANALYZE命令就很有用了。
相关问答
Q1: 有什么好的知识管理软件?
国内外顶级的10个知识库管理系统(含开源、免费)
1.PingCode
国内最推荐的一款企业级知识管理系统,简单易用,功能成熟,服务口碑好,2022年入选36氪发布的年度口碑企服产品榜单 TOP 36。
在软件开发团队的使用体验远超其他团队,但同样被非常多的市场、销售、项目经理等各种部门广泛用于团队知识库创建、项目文档的管理、文档的在线编辑协作、跨团队信息共享、集体讨论、帮助中心、产品介绍、开发文档、在线手册等制作。
PingCode 知识库工具主要功能包括但不限于:
多人实时在线协同编辑、信息实时保存同步、历史版本快速追溯;
文档支持共享、关注、评论、批注,可在消息/飞书等第三方账号收到提醒;
支持富文本编辑,支持插入图片、表格、思维导图、视频、Markdown、代码块、页面、附件等,支持模板创建、复用;
与研发项目管理、测试管理具体工作项深度关联,形成“需求-开发-测试-知识沉淀”管理闭环;
页面与工作项相互关联,页面支持插入工作项及工作状态,具体工作项可直接关联知识库或页面;
支持页面级的权限管控、以及水印、审计等安全能力;
之所以说 PingCode 在软件开发团队使用体验更佳是因为:PingCode 除了有知识管理子产品外,产品矩阵覆盖了研发全生命周期,具备目标管理、产品管理、项目管理(敏捷/kanban/瀑布)、测试管理、缺陷追踪、项目文档管理、效能度量等不同的子产品,客户可以按需购买。并且集成了github、gitlab、jinkens、企微、飞书等主流工具。
软件优点:
产品开箱即用,简单易上手,产品服务口碑好;
为25人以下团队免费提供基础版本;
国产化,支持信创、麒麟等;
支持私有部署、定制化以及Saas等购买方式;
国际信息安全体系认证和精细权限管控,安全有保障;
软件缺点:
不支持多语言;
无法满足百度百科这类知识库的搭建;
PingCode 官网
2.Confluence
与 PingCode 一样是一个为软件开发团队打造的团队级知识库子产品。澳大利亚 Atlassiana 公司的产品,在国内算是比较知名的的企业知识管理与协同软件,可以用于构建企业wiki,具有成熟的功能,与 PingCode 知识库一样,能够直接关联研发管理的各环节。它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。
工具优点:
文档的组织:在左侧目录栏,所见即所得地一次操作完成目录结构与页面创建;
丰富的文档模板:专门针对技术团队的文档系统,所以具有各种丰富的模板;
关联研发过程:技术团队认为Confluence好用,确实是因为它针对技术团队特点,细致地解决了场景化问题;
非常丰富的插件:Confluence 集成了国外几乎所有主流的工具。
工具缺点:
随着人数的增加,管理变得复杂:在cofluenence中,每增加一个人,就必须手动添加,并配置数十个或数百个页面的许可;
免费版本的Confluence功能非常有限;
Confluence非常昂贵,例如100人的情况下,Confluence需要10万大洋/年,而国内的PingCodeWiki等同类工具只需要2-3万/年。
对国内用户不友好:Atlasian在2021年宣布停止国内本地版销售,逼用户上云,而国内使用云版又要翻墙。
非技术团队使用高学习成本:Confluence可以用于营销和人力资源,但许多员工可能会被软件性质所需的技术知识所阻止;
国内不设公司,服务全部由代理商完成,而且价格不便宜(有的代理实施费用1万/天)。
官网:
3.MediaWiki
MediaWiki全球比较著名的开源wiki程序之一,最适合企业用来搭建百科、知识库查询等用途,企业内部使用可能会带来过高的成本。它运行于PHP+MySQL环境。MediaWiki从2002年2月25日被作为维基百科全书的系统软件,并有大量其他应用实例。仅从这点来看其功能的强大和成熟度毋庸置疑,所以也不过多介绍。
工具优点:
经受过重量级应用的考验,功能丰富却架设简单;
全世界最大的wiki项目维基百科是使用mediawiki的成功范例,数据量、访问量都超级庞大;
mediawiki的功能非常丰富,支持多语言版本,充分满足知识站点的需要;
运行环境要求很低,架设过程简洁,即使新手也可以迅速建立自己的站点
最大的wiki程序社区;
mediawiki是应用最广的wiki程序,数以万计的网站在使用它,很容易找到范例站点;
有大量的热心参与人员参与研究,资料多,容易找到互相交流的朋友;
持续开发,程序特性功能不断完善,保证未来的支持。
工具缺点:
强大的功能带来了非常高的学习成本;
除此以外,作为国外工具永远存在的风险都是禁用,俄罗斯就是很好的例子;
后台管理功能不是十分简单友善,仅通过简单的特殊页面完成这些功能,大部分系统设置是依靠配置文件而非直接界面设置;
一般环境下,虽然内置部分缓冲机制优化运行,mediawiki的运行速度相对其他wiki程序要差很多。mediawiki的目标是为维基媒体项目服务,很多华丽的性能特征要在高端设备环境(多服务器,多数据库,反向缓冲squid服务器阵列,大量额外的PHP缓冲引擎)中才能体现;
官网:
4.Gitbook
非常适合程序员用来做个人知识库的产品:GitBook是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书。美观、好用非常适合用来搭建官网上的知识库、帮助中心,他们自身的官网就是基于此搭建的(如图)。除此以外,也非常适合程序员用来做个人知识库,更好的一点是,gitbook支持直接发布在github博客系统上, 你可以把你的作品放在github上,别人可以来fork可以来帮你纠错,给你发pull request。除此以外GitBook 的第三方插件很丰富。
软件缺点:
虽然能制作出优美的官网文档,但在官网的SEO优化方面存在一定的问题;
近几年官方这样疏于维护的情况下,在2021年的今天,你要做好遇到很多坑的心理准备
官网:
5.语雀
更适合做个人笔记工具的知识库:语雀,是蚂蚁集团旗下的在线文档编辑与协同工具,2015年内部孵化的项目,2022年发布移动端。使用了“结构化知识库管理”,形式上类似书籍的目录。与其他产品可以随意建立文档不同,语雀上的每一篇文档必须属于某一个知识库,语雀希望通过这样的产品设计,来从源头上帮助用户建立起知识管理的意识,培养良好的知识管理习惯。除此以外,它能够满足“卡片笔记”这种方法论下的笔记记录方式。同时也具备一定的团队协作能力。
软件优点:
可以全局搜索:腾讯文档无法全局搜索,就无法找到一些文档。
语雀的插入功能丰富:特别是表格很好用,而印象笔记的表格真的不太好用。思维导图虽然不是很完美,但已经比很多文档笔记产品的思维导图都好用很多了,感受最深的就是可以拖动画布。
语雀的画板很好用:功能丰富,满足很多要求,这是其他笔记文档工具都不具备的
语雀的电脑端可以直接操作文档:很多人说飞书好,但是我作为一个办公喜欢电脑端软件的的人来说,使用飞书电脑端操作操作,要跳转到浏览器,这样真的很不舒服。
软件缺点:
感觉语雀在用户体验上有一些反常识的设计,操作繁复,十分的不便利,比如:知乎文章《语雀的缺点和优点》中吐槽的;
更适合个人,团队协作能力较弱;
无法保持登录,经常需要重复登录;
官网:
6.wiki.js
它是一款轻量级、功能强大的 wiki 开源项目,拥有评论、Markdown 编辑器、图片上传、标签、全局搜索、协同编辑、编辑历史、用户管理、谷歌分析等功能,重点是支持中文,而且支持高度自定义。用到的技术栈也不同于老旧的 wiki 系统,它采用了 Node.js、PostgreSQL、Vue.js、Docker 等技术。
工具缺点:
访问加载速度较慢,可能是国外产品的关系;
虽然 wiki.js 更新积极、提交频繁,但目前它还不支持自定义主题;
对中文搜索不友好,默认不支持中文搜索,需要采用 ES 但这样就不再轻量,或者采用 pg 插件让 pg 支持中文分词;
中文翻译覆盖率并不像官网展示的 100%,管理后台里还是有未翻译的地方;
项目地址:
7.DokuWiki
开源免费,轻量级百科系统不需要数据库即可运行,不少人搭建的wiki就是选用的这个,总的来说需要的功能都有,模板和插件很多,最大的问题是中文资料比较少,官网下载速度也有点慢。对了,下载的时候最好把“更新”插件一起下载这样后续更新就方便很多。
官网:
开源下载地址:
8.Notion
Notion 是前些年在国内外都非常流行的管理工具,同时适用于个人以及团队协作使用(最近国内有个类似产品Flowus也比较火)。
由于其独特和灵活的使用方式,它很适合作为知识管理软件。和传统的笔记软件不同,Notion采用了模块化的设计,每个段落都是一个独立的区块,可以自由拖拽和布局,而且区块还可以设置为各种类型,包括标题、待办、列表、引用、图片、视频等,甚至还提供了第三方嵌入功能,你可以在其中加入网页片段、代码、思维导图、流程图等模块,创建内容丰富的文档。你可以认为它是一个工具集合,能够同时满足任务管理、进度管理、文档协作、知识库、项目计划等等。
软件缺点:
网络问题,受中国各地区复杂的网络情况影响,某些地区访问Notion及其缓慢,当内容中包含大量图片时,体验将变得很糟糕,只能自己寻找合适的手段解决;
丰富的功能必然的带来了较高的上手门槛,如果你只是想找一个单纯的知识库,那它可能并不适合;
离线模式不支持,Notion目前所有的内容基于在线web访问的方式,当浏览器缓存内容被清除后,意味着你每次访问页面都将需要进行新的载入,当你某个页面包含大量的数据时,等候时间将会很长,长达5-15秒(受网络速度影响),不过官方承诺将在后续版本支持离线模式。
中文搜索和分词及其糟糕,这个问题在2020年2月更新已得到解决,新的搜索机制对中文的兼容已非常良好,并且支持过滤。
没有标签体系,无法达到Onenote的标签快速查找的功能,Onenote可以为某一行文本设置某类标记,然后通过查找标记进行快速查找,在Notion不支持标记,只能通过自己的手动编辑某类特殊的文本,然后通过搜索功能勉强实现标记功能;
9.docsify
免费开源,轻量级文档网站,界面简洁优雅,目前很多开源项目的文档都选用这个系统搭建,这里需要注意的是这个是单文档,不是那种大型wiki系统。
官网:
10.坚果云
坚果云一款提供云存储服务的工具,不同于树状结构的文档管理结构,它所提供的是文件夹类型的知识库管理方式。其优点就在于除了文档内容还能够对几乎所有类型的知识成果进行管理沉淀,比如特别适合视频、音频等知识管理。
坚果云分为面向个人和企业两种,可以帮助人们随时随地用任何设备快速访问文件,功能包括文件自动同步、文件共享、文件搜索、照片视频自动备份等,可应用于汽车、能源、金融、建筑等行业。
官网:
Q2: 《Postgre SQL Administration》txt下载在线阅读全文,求百度网盘云资源
《PostgreSQL 11 Administration Cookbook: Over 175 recipes for database administrators to manage enterprise databases》(Simon Riggs)电子书网盘下载免费在线阅读
链接:
提取码: egn2
书名:PostgreSQL 11 Administration Cookbook: Over 175 recipes for database administrators to manage enterprise databases
作者:Simon Riggs
出版社: Packt Publishing
出版年份:2019-5-3
页数:600
内容简介:
PostgreSQL is a powerful, open source database management system with an enviable reputation for high performance and stability. With many new features in its arsenal, PostgreSQL 11 allows you to scale up your PostgreSQL infrastructure. This book takes a step-by-step, recipe-based approach to effective PostgreSQL administration.
The book will introduce you to new features such as logical replication, native table partitioning, additional query parallelism, and much more to help you to understand and control, crash recovery and plan backups. You will learn how to tackle a variety of problems and pain points for any database administrator such as creating tables, managing views, improving performance, and securing your database. As you make steady progress, the book will draw attention to important topics such as monitoring roles, backup, and recovery of your PostgreSQL 11 database to help you understand roles and produce a summary of log files, ensuring high availability, concurrency, and replication.
By the end of this book, you will have the necessary knowledge to manage your PostgreSQL 11 database efficiently.
Q3: 知乎上有哪些比较活跃的数据库领域大牛
阿里云数据库团队比较熟,随手梳理了以下
丁奇:MySQL社区核心成员。专注于数据存储系统、MySQL 源码研究和改进、MySQL 性能优化和功能改进。
子嘉:Redis中国用户会发起人,Redis技术大学校长
叶翔:MongoDB江浙地区用户会主席
在此之前也是淘宝Tair分布式KV系统的技术负责人,负责过阿里云Memcache,Redis服务等,在阿里集团工作8年,一直在做NoSQL相关的技术。
德歌:阿里云 PostgreSQL技术负责人,PostgreSQL中国技术大学校长、GreenPlum源码深度研究者
彭立勋:参与了ACMUG(MySQL中国用户组)的发起和组建,担任副主席和杭州地区的组织者。MariaDB基金会唯一的中国成员
萧少聪:PostgreSQL 中国社区主席
Q4: SQL实战新手入门:关系型数据库管理系统
关系型数据库管理系统
本书是讲述SQL的 它是一种关系型数据库或者关系型数据库管理系统(RDBMS)的语言 自从Codd博士在 世纪 年代奠定关系型数据库的理论基础以来 已经产生了相当多的关系型数据库实现 一些新的关系型数据库实现也不断出现
很多人将DB 视为所有数据库的鼻祖 IBM的研究员Edgar Frank Codd博士在 年的一份IBM的研究报告中发表他的论文 Derivability Redundancy and Consistency of Relations Stored inLarge Data Banks 时 给这种数据库理论定义了一个非常恰当的术语 关系型 关系型数据库被其他两种技术竞争 一种是Honeywell Information Systems在 年销售的Multics RelationalData Store 另一种是密歇根大学从 年起作为实验性设计的Micro DBMS(它开创了Codd博士两年之后提出的规范化理论) Micro DBMS的最后一个产品已经于 年退役 这两种技术演变成了 年发布的Oracle V 商业数据库 在通往RDBMS的道路上 包含了很多其他公司的产品所树立的里程碑(当然偶尔也有墓碑) 这些产品包括 IBM PRTV( ) IBM SQL/DS( ) QBE( ) Informix( ) Sybase( ) Teradata( ) Ingres 一个给其他很多成功的系统带来灵感的开源项目 例如PostgreSQL( ) Nonstop SQL( )和MicrosoftSQL Server( )等 这些系统使用了原始SQL的不同方言 SEQUEL QUEL Informix SQL等 直到 年 人们才第一次试图为SQL语言制定标准 毫无疑问 各个厂商关于SQL语言的战争仍在继续
当前的RDBMS市场已经被几个重量级的专有关系型数据库瓜分 Oracle( %) IBM( %)和Microsoft( %) 更小的专有数据库系统Teradata和Sybase 每种不到 %的市场份额 其他数据库厂商 包括开源数据库 大约占有 %的市场份额
对于大型企业来说 选择一个数据库产品作为应用程序的基础并不是一个简单的任务 这不仅仅是因为数据库系统软件需要花费好几万美元的许可证费用 几十万美金的维护和技术支持费 而且在于与其他软件 硬件和人力资源投资相比 数据库软件的投资还是一个决定整个企业架构的关键要素 尽管近年来从一个RDBMS迁移到另一个RDBMS变得更加容易 但考虑选择哪一种数据库依然会给CFO带来噩梦
IBM DB LUW
从带有MVS系列操作系统的大型机到z/OS 以及后来的UNIX和Windows系统 IBM在RDBMS领域都是一个长期的领跑者 IBM数据库的当前版本是IBM DB LUW(Linux UNIX和Windows)
IBM DB 在事务处理速度上保持了绝对领先的记录(更多信息请参见第 章) 它具有多个不同的版本 从Advanced Server Enterprise版本到免费的DB Express C版本(尽管功能上有限制) 免费的DB Express C版本可用于运行本书中的示例
直到DB 的 版本 依然遵循ANSI/ISO SQL Entry标准(请参考本章后面的内容)并支持由其他标准化组织制定的一些高级功能 例如Open Geospatial Consortium(开放地理信息联盟) JDBC X/Open XA 它还包含了最新SQL: 标准的部分功能 除了自己内置的过程化扩展语言SQL PL之外 它还支持使用Oracle的PL/SQL语言 Java语言 甚至Microsoft的 NET家族的语言来创建存储过程(更多内容请参见第 章)
Oracle
Oracle数据库可以追溯到 年第一次发布的Oracle V 开始时用于VAX/VMS系统 并于 年支持UNIX系统 经过多年发展 对于SQL标准定义的绝大多数功能 Oracle数据库都添加了相应的支持 在最新发布的Oracle g版本中功能支持达到了极致 它声称遵循最新SQL: 标准的很多功能
在高性能事务处理的标杆上 Oracle占据了第二名的位置 它是企业生态系统的核心 Oracle是一个安全的 健壮的 可伸缩的 高性能的数据库系统 它统治UNIX市场长达数十年 除了对SQL标准的支持之外 Oracle还提供了一种内置的过程化语言PL/SQL(关于过程化扩展的更多内容 请参见第 章) 另外它还支持通用的程序设计语言 例如Java
在写作本书之时 Oracle的最新版本是Oracle g 只有Oracle g有免费的速成版 该版本在数据存储的容量和RDBMS能够利用的处理器(CPU)数量上存在一定的限制 速成版完全支持本书所讨论的所有SQL功能
Microsoft SQL Server
SQL Server来源于Microsoft Ashton Tate和Sybase合作的结果 开始的目标是改写已有的 仅适用于UNIX的Sybase SQL Server数据库 使之适用于新的IBM操作系统OS/ Ashton Tate随后退出了这一合作 IBM OS/ 操作系统也逐渐被人淡忘 Microsoft和Sybase为了分享成果 开始小心地避免触犯彼此 Microsoft致力于发展并支持Windows和OS/ 系统上的SQL Server 而Sybase则致力于UNIX平台 尽管在SQL Server的核心技术上Microsoft依然采用了相当多的Sybase技术 但双方的合作关系于 年正式结束 Microsoft于 年发布了Microsoft SQLServer 它消除了Sybase余留的痕迹 为世界(Windows系统的世界)带来了一个完全崭新的RDBMS系统 时至今日 Microsoft占据了RDBMS大约 %的市场份额 而在Windows系统上它占据了至高无上的位置
在写作本书之时 最新版本是Microsoft SQL Server Release Microsoft还提供了一个免费但有限制的Express版本 它支持本书所介绍的全部SQL功能
Microsoft Access
Microsoft Access也被称为Microsoft Office Access 它是一个桌面型关系数据库(相对来说是关系型的) Microsoft Access的设计目标是成为一个集成的解决方案 结合关系型数据库引擎的要素和应用程序开发的基础结构(配套有内置的程序设计语言和程序设计模型) 并作为一个报表平台 与本书中讨论的其他RDBMS不同的是 Microsoft Access是一个基于文件的数据库 因此它在性能和可伸缩性方面都存在固有的局限 例如 虽然最新版本的Access理论上允许最多 个并发用户 但在实践中超过 多个用户就会减慢Access的性能 Access仅支持SQL标准的一个子集 它提供了许多仅在Access环境中有效的功能
Access提供的功能之一就是从远程数据库链接表的能力 该功能使Access可以作为应用程序
的前端 访问任何与ODBC/OLEDB兼容的数据库
PostgreSQL
PostgreSQL是从美国加州伯克利大学的Michael Stonebraker所领导的一个项目演变而来的 Michael Stonebraker是关系型数据库理论的先驱 在最初的Ingres项目以及其继任者PostgreSQL中采用的那些原则也以各种方式被其他RDBMS产品采用 例如Sybase Informix EnterpriseDB和Greenplum
PostgreSQL的第一个版本发布于 年 之后第二年以 版本的名义发布 并保留了一个由一组专门的开发人员维护的开源项目 PostgreSQL具有很多个商业版本 最著名的是EnterpriseDB 一个私人公司为该产品提供企业支持(以及大量专有的管理工具) 在一些苛刻的企业级应用环境中 很多高端客户(例如Sony和Vonage)都采用了开源的RDBMS 这充分证明了EnterpriseDB的性能
在对SQL标准的支持方面 PostgreSQL可以说是最接近SQL标准的 另外它还提供了很多在其他数据库中所没有的功能 与它的开源伙伴(例如MySQL)不同 PostgreSQL从一开始就提供了参照完整性和事务支持 PostgreSQL内置了对PL/pgSQL过程化扩展语言的支持 另外实际上还具有适配其他任何语言来实现过程化扩展的功能
MySQL
MySQL最先是由Michael Widenius和David Axmark于 年开发的 并于 年发布了第一个版本 MySQL最初定位为一个轻量级的快速数据库 用于作为数据驱动型网站的后台数据库 尽管MySQL缺乏更加成熟的RDBMS产品所具有的许多功能 但在提供信息服务的速度上非常快 对于很多场合来说都已经 足够好 (为了达到真正的快速 MySQL避开了参照完整性约束和事务支持 更多内容请参见第 章和第 章) 另外 MySQL有着无法抗拒的价格 它是免费的 因此 在中小规模的用户群中 MySQL成为最流行的关系型数据库 在数据库产品的市场上 很多其他的免费产品在功能上都有所缺乏或者带有近乎商业炒作的宣传 数据库产品的巨人 Oracle IBM Microsoft和Sybase在那时也都没有提供各自RDBMS产品的免费速成版 在 年 Sun Microsystems公司收购了MySQL 随后Sun公司又被Oracle收购
目前 Oracle提供了一个带有商业支持的MySQL版本和一个Community Edition版本 伴随着这一收购 出现了大量分支版本 例如MariaDB和 Percona Server 它们在通用公共许可证(General PublicLicense GPL)下继续保持免费状态 GPL是一种限制最小的开源许可证
MySQL的最新版本是 MySQL 也已经指日可待 它是多平台的(Linux/UNIX/Windows) 并且支持SQL: 的绝大多数功能 其中一些功能依赖于选定的配置选项(例如 存储引擎)
存储引擎选项是MySQL独一无二的特性 它允许采用不同的方式处理不同的表类型 每一种引擎都有独特的功能和一定的限制(例如事务支持 聚集索引 存储限制等) 可以采用不同的存储引擎选项来创建MySQL数据库中的表 默认使用的是MyISAM引擎
HSQLDB和OpenOffice BASE
超结构化查询语言数据库(Hyper Structured Query Language Database HSQLDB)是一个用Java程序设计语言实现的关系型数据库管理系统 它是伯克利软件发行(BSD)许可证(这个许可证相当宽松)下的一个开源数据库
HSQLDB是OpenOffice BASE自带的默认RDBMS引擎 OpenOffice BASE是一个桌面型数据库 被定位于和Microsoft Access进行市场竞争 OpenOffice BASE也是一个关系型数据库 它健壮 功能丰富且相当快速 支持多种平台 包括Linux 各种版本的UNIX和Microsoft Windows OpenOffice BASE声称几乎完全遵循SQL: 标准 该标准包含了本书所讨论的绝大多数SQL子集
改写过的HSQLDB可以作为OpenOffice 套件组件BADE的一个嵌入的后端 并从 版本开始成为OpenOffice 套件中的一部分 与Microsoft Access类似 假如有适当的驱动程序的话 OpenOffice BASE可以连接到多种不同的RDBMS 在OpenOffice BASE产品中 已经包含了大量可用的Java Database Connectivity(JDBC)和ODBC(Open Database Connectivity)驱动程序
随着Oracle收购了OpenOffice 而其在Oracle的资助下作为开源项目的状态并不明确 OpenOffice 社区决定启动一个名为LibreOffice的新项目 意图在原来的BSD许可证的授权下将LibreOffice作为一个免费软件 实现OpenOffice的所有功能
关系型数据库并不是数据库领域中唯一的主角 一些似乎已经被关系型数据库理论打败的旧技术在更快和更便宜的硬件以及软件创新的帮助下卷土重来 对更高性能和更容易创建应用程序的需求催生了对列式数据库(columnar database)和面向对象数据库 使 将所有数据放在一个桶中 方法可行的框架 特定领域扩展(例如测地数据管理或多媒体)以及各种数据访问机制的研究 第 章将讨论这些话题
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixinzhi/Article/program/SQL/201311/16492
postgresql书知乎的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、postgresql书知乎的信息别忘了在本站进行查找喔。






