《数据库查询优化器的艺术》章节试读

出版社:机械工业出版社
出版日期:2014-1-1
ISBN:9787111447467
作者:李海翔
页数:532页

《数据库查询优化器的艺术》的笔记-第270页

这里几章说的是 PostgreSQL 的优化算法。在此之前,我一直觉得集合运算特别高端,一定有很高级的算法取得很好的性能。事实证明是没有。数据库的复杂性质并不在集合运算里。
在优化器层面,单表的操作比较简单,只是索引查询扫描全表等运算,其他的优化比如物理优化被放在了后面给其他模块做。优化的主要重心集中在了 join 操作上。
多表的 join 操作本质上是做笛卡尔积,然后不同的条件进行不同的过滤。笛卡尔积符合结合律规则,所以优化的很大一部分都在计算 join 的顺序。
join 操作通常有三种方式,一是朴素的叫 nested loop,即循环取前表的每一个记录和后表的每一个记录做运算,符合则留下,不符合丢弃。第二种叫 hash join,即把前一个表做成 hash,然后后一个表扫描一遍,这里只要遍历两个表各一次。还有一种叫 merge join,是 nested loop 和 hash join 中间的技术,把两表排序,依序比较,如果过滤条件合适,比较有可能提前终止。
join 的顺序又分为 right-deep 和 left-deep 以及 bushy. 另外 Oracle 还实现了 bitmap index, 在数据集是标量的时候并且重复较多的时候用,类似于面试题中的 10亿个32位数字排序。
本来 right-deep 和 left-deep 是对称的,在多核心的机器上有不同的表现。原因还没看明白 = =|||,优化层面似乎做分布式是比较容易的,本来也是从下到上,部分最优达到全局最优的,分开做不会有太的影响。
这几章作者基本上是在讲代码了,先说数据结构,再说函数功能,原理一概不讲,大概假设读者都很熟悉吧。
http://www.neilconway.org/talks/optimizer/optimizer.pdf
http://datavirtualizer.com/right-deep-left-deep-and-bushy-joins-in-sql/
https://iggyfernandez.wordpress.com/2010/11/27/sql-101-deep-left-trees-deep-right-trees-and-bushy-trees-oh-my/
http://en.wikipedia.org/wiki/Join_(SQL)

《数据库查询优化器的艺术》的笔记-第45页 - 第一章

第一章的内容是逻辑层的谓词优化,整体来说不能叫优化,可以说是去劣化吧,MySQL 等服务器可以把用户输入的一些劣质代码进行合适的转化。由于下层的实现有很多其他要求,所以优化能力也很有限。MySQL 也不像 GNU 系列会进行一些特别激进的优化。主要的优化部分还在物理层实现。
今天看 jeremy cole 的博客,原来关系数据库实现的方式上和 NoSQL 差不多,不过 NoSQL 把逻辑优化交给了应用层,专心做物理层的优化,所以看起来性能会提高一大截。但对于复杂的逻辑,估计应用层代码也会非常复杂。
MySQL Internals 说的:
1. 使用哪个 key 可以优化查询
2. 使用 key 还是全表扫描
3. 连接顺序
4. 重写 where
5. 尝试把外链接重写为内链接

《数据库查询优化器的艺术》的笔记-第100页

老实说看到前面50页是略有些失望的。都是一些吊书袋的术语,又没有深入讲。其实用处不太大。
后面讲 PostgreSQL 这两章特别棒。思路清晰,结构化很强。看起来 PostgreSQL 要比 MySQL 设计的好一些,模块化很强,学习一个部分的东西,跟其他东西关联不多。看代码不容易受打扰。
作者说,唯美唯理论,真真分析代码看着都舒服。
点个赞。

《数据库查询优化器的艺术》的笔记-第9页 - 第一章 数据管理系统的查询优化

从前言和第一章看, 李海翔先生的行文要比姜承尧先生好许多. 写作也非常认真, 没有明显的错别字.
本书的编排方式是自上而下的方式: 先讲原理, 再讲实现, 最后做对比和讨论.
原理的部分分了三部分, 逻辑查询优化, 即从数理逻辑计算的角度上进行的 SQL 语句优化; 物理查询优化, 即对于两个或多个表之间结构上的操作的优化; 最后一部分讲优化器和其他部分的关系.
实现的部分分别讲了 PostgreSQL 和 MySQL 两者对于查询优化的实现. 其讲述结构类似, 都是开始讲概念, 然后讲数据结构, 然后讲原理算法, 最后总结和其他模块的关系. 这个讲述方式我非常喜欢.
最后一部分是 PostgreSQL 和 MySQL 的对比, 内容非常少.
本书中用到的关系代数中的知识并不多, 最主要的两部分就是代码分析和数据库基本概念的分析. 阅读过程中身边有一本数据库基本概念的书最好不过了.


 数据库查询优化器的艺术下载


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024