数据库索引设计与优化-带书签pdf高清中文电子版
分享到:
数据库索引设计与优化是一本数据库领域的重要理论大作。本书提供了一种简单、高效、通用的关系型数据库索引设计方法,由蚂蚁DBA团队的多位同事共同翻译完成,其中第4.7.10.12.14.16章由曹怡倩翻译,第3.9.13.15章由赵建伟翻译,第1.2.5.6.8.11章分别由刘晓军等翻译。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL运行的CPU时间及执行时间,帮助读者从原理上理解SQL、表及索引结构、访问方式等对关系型数据库造成的影响,并能够运用量化的方法进行判断和优化,指导关系型数据库的索引设计。数据库索引设计与优化适用于已经具备了SQL这一关系型语言相关知识,希望通过理解SQL性能相关的内容,或者希望通过了解如何有效地设计表和索引而从中获益的人员。另外,数据库索引设计与优化也同样适用于希望对新硬件的引入所可能带来的变化做出更好判断的资深人士。
——盖国强(Oracle ACE总监,云和恩墨创始人)
★在工程领域,很多数据库工程师们都积累了对于索引设计与优化的经验,可惜很少有书籍系统地介绍这部分内容,这导致网上存在很多错误的观念。可喜的是本书详细介绍了一种简单、高效的数据库索引设计方法,可让读者对数据库的索引设计快速进阶。
——姜承尧(网易杭州研究院数据库技术组负责人)
禁用于商业用途!如果您喜欢《数据库索引设计与优化》,请购买正版,谢谢合作。
爱学习,请到3322软件站查找资源自行下载!
关于SQL 性能的另一本书
不合适的索引
误区和误解
误区1:索引层级不要超过5 层
误区2:单表的索引数不要超过6 个
误区3:不应该索引不稳定的列
示例
磁盘驱动器使用率
系统化的索引设计
第2章 表和索引结构介绍
索引页和表页
索引行
索引结构
表行
缓冲池和磁盘I/O
从DBMS 缓冲池进行的读取
从磁盘驱动器进行的随机I/O
从磁盘服务器缓存进行的读取
从磁盘驱动器进行的顺序读取
辅助式随机读
辅助式顺序读
同步I/O 和异步I/O
硬件特性
DBMS 特性
页
表聚簇
索引行
表行
索引组织表
页邻接
B 树索引的替代品
聚簇的许多含义
第3 章 SQL 处理过程
简介
谓词
评注
优化器及访问路径
索引片及匹配列
索引过滤及过滤列
访问路径术语
监控优化器
帮助优化器(统计信息)
帮助优化器(FETCH 调用的次数)
何时确定访问路径
过滤因子
组合谓词的过滤因子
过滤因子对索引设计的影响
物化结果集
游标回顾
方式1:一次FETCH 调用物化一条记录
方式2:提前物化
数据库设计人员必须牢记
练习
第4 章 为SELETE 语句创建理想的索引
简介
磁盘及CPU 时间的基础假设
不合适的索引
三星索引——查询语句的理想索引
星级是如何给定的
范围谓词和三星索引
为查询语句设计最佳索引的算法
候选A
候选B
现今排序速度很快——为什么我们还需要候选B
需要为所有查询语句都设计理想索引吗
完全多余的索引
近乎多余的索引
可能多余的索引
新增一个索引的代价
响应时间
磁盘负载
磁盘空间
一些建议
练习
第5 章 前瞻性的索引设计
发现不合适的索引
基本问题法(BQ)
注意
快速上限估算法(QUBE)
服务时间
排队时间
基本概念:访问
计算访问次数
FETCH 处理
主要访问路径的QUBE 示例
使用满足需求的成本最低的索引还是所能达到的最优索引:示例1
该事务的基本问题
对该事务上限的快速估算
使用满足需求的成本最低的索引还是所能达到的最优索引
该事务的最佳索引
半宽索引(最大化索引过滤)
宽索引(只需访问索引)
使用满足需求的成本最低的索引还是所能达到的最优索引:示例2
范围事务的BQ 及QUBE
该事务的最佳索引
半宽索引(最大化索引过滤)
宽索引(只需访问索引)
何时使用QUBE
第6 章 影响索引设计过程的因素
I/O 时间估算的验证
多个窄索引片
简单就是美(和安全)
困难谓词
LIKE 谓词
OR 操作符和布尔谓词
IN 谓词
过滤因子隐患
过滤因子隐患的例子
最佳索引
半宽索引(最大化索引过滤)
宽索引(只需访问索引)
总结
练习
第7 章 被动式索引设计
简介
EXPLAIN 描述了所选择的访问路径
全表扫描或全索引扫描
对结果集排序
成本估算
数据库管理系统特定的EXPLAIN 选项及限制
监视揭示现实
性能监视器的演进
LRT 级别的异常监视
程序粒度的均值是不够的
异常报告举例:每个尖刺一行
问题制造者和受害者
有优化空间的问题制造者和无优化空间的问题制造者
有优化空间的问题制造者
调优的潜在空间
无优化空间的问题制造者
受害者
查找慢的SQL 调用
调用级别的异常监视
Oracle 举例
SQL Server 举例
结论
数据库管理系统特定的监视问题
尖刺报告
练习
第8 章 为表连接设计索引
简介
两个简单的表连接
例8.1:CUST 表作为外层表
例8.2:INVOICE 表作为外层表
表访问顺序对索引设计的影响
案例研究
现有索引
理想索引
理想索引,每事务物化一屏结果集
理想索引,每事务物化一屏结果集且遇到FF 缺陷
基本连接的问题(BJQ)
结论:嵌套循环连接
预测表的访问顺序
合并扫描连接和哈希连接
合并扫描连接
例8.3:合并扫描连接
哈希连接
程序C:由优化器选择MS/HJ(在现有索引条件下)
理想索引
嵌套循环连接VS
嵌套循环连接VS
嵌套循环连接VS.理想索引
连接两张以上的表
为什么连接的性能表现较差
模糊的索引设计
优化器可能选择错误的表访问路径
乐观的表设计
为子查询设计索引
为UNION 语句设计索引
对于表设计的思考
冗余数据
无意识的表设计
练习第9 章 星型连
接
介绍
维度表的索引设计
表访问顺序的影响
事实表的索引
汇总表
第10 章 多索引访问
简介
索引与
与查询表一同使用索引与
多索引访问和事实数据表
用位图索引进行多索引访问
索引或
索引连接
练习
第11 章 索引和索引重组
第12 章 数据库管理系统相关的索引限制
第13 章 数据库索引选项
第14 章 优化器不是完美的
第15 章 其他评估事项
第16 章 组织索引设计过程
参考文献
术语表
索引
为了满足这一需求,我们认为必须关注两个问题。第一个必须关注的对象是关系型系统中用于确定如何以最高效的方式查询所需数据的部分(我们称其为SQL优化器)。第二个必须关注的是索引及表是以何种方式被扫描的。我们试着把自己放在优化器的角度思考问题,也许当我们理解为什么可能存在问题时,我们就能够做出改变。幸运的是,我们需要知道的有关优化器的内容其实非常少,但非常重要。本书与其他同领域的书籍的一个很重要的区别在于,我们不会提供大量的用于指导SQL编写以及表和索引设计的规则和语法。这不是一本告诉你在各种场景下应当使用哪一个SQL.WHERE语句的书,也不是一本告诉你应当使用什么语法的书。如果我们努力遵循一大堆复杂、模糊甚至可能不完整的指导原则,那么我们就是在走前人走过的老路。相反,如果我们能够理解SQL 请求对关系型系统造成的潜在影响,并知道如何控制这一影响,那么我们就能够理解、控制、最小化甚至避免这些问题。
本书的第二个目的是展示如何使用这些知识从CPU和执行时间的角度量化运行过程。只有这样,我们才能真正判断我们设计的表和索引是否合适,我们需要用真实的数字来展示优化器是如何思考的、扫描将耗费多少时间,以及需要进行哪些改动以提供满意的性能。不过,最重要的是,我们必须能够方便且快速地完成这一评估过程,这就要求我们必须将关注点放在少数几个真正重要的问题上,而不是将关注点放在那些不那么重要的细节上(许多人都被这些细节问题困扰过)。所以,关键就是要关注少数核心领域,并能够说出这需要花费多少时间或成本。
同样是由于我们专注于核心问题,所以我们还能提供另一个优势。对于那些可能使用多个关系型产品(即便来自相同的供应商)的人,由于我们在本书中所使用的是一种适用于所有关系型产品的通用方法,所以使用者就不需要阅读和掌握多套截然不同的规则和建议。所有“真正的”关系型系统的优化器都有一个相同的任务:它们都必须要扫描索引和表。它们都使用异常相似的方式来处理这些操作(虽然他们对其有各自不同的描述方式)。当然,它们之间的确存在着一些差异,但是我们可以毫不费力地处理这些不同。
也正是由于相同的原因,本书的读者对象包括:认为了解SQL性能方面的知识或如何有效设计索引的知识能给自己带来益处的人,直接负责索引设计的人,编写SQL语句用于查询或作为应用程序一部分的人,以及那些负责维护关系型数据和关系型环境的人。只要你觉得需要对自己所做的事情的性能影响负责,那么你都将不同程度地从本书中受益。
最后,用一句话概括本书目标读者所需具备的背景知识:我们假定读者已经具备了SQL这一关系型语言相关的知识。考虑阅读本书的人应该已经具备了对计算机系统的大体理解。除此以外,能帮到读者的最重要的品质也许就是对事物运行原理的好奇和兴趣了,还有想把事情做得更好的渴望。另一方面,在众多拥有几十年的关系型系统经验的人中,有两类人也会从本书受益:第一类是那些根据详细的规则手册良好地管理了系统很多年的人,他们想通过理解这些规则适用的原因来使自己的工作更轻松一些;第二类是那些已经使用了本书中所描述的技术很多年,但对于新硬件所带来的改善并不赞赏的人。
本书中的绝大部分观点及使用的技术都是原创的,因此很少有对外部出版物及其他作者成果的引用。在本书的创作过程中,我们非常感谢给予了我们如此多帮助和鼓励的朋友及同事们。感谢Matti.Sthl在全书撰写过程中所给予的详细指点及批判性但极其有用的建议。感谢Lennart.Henng、Ari.Hovi、Marja.K.rmeniemi和Timo.Raitalaakso的帮助和校对,也感谢Akira.Shibamiya在关系型性能公式上的原创工作。另外,还要感谢许许多多的学生和数据库顾问们,感谢他们提供的对于实际问题及其解决方案的深入见解。最后,特别感谢Meta 和Lyn,没有他们的鼓励与支持,本书不可能完成,Meta 还特别为本书设计了封面,与全书的主旨非常契合。
Tapio Lahdenm?ki(斯姆勒尼科,斯洛文尼亚)
Michael Leach(什鲁斯伯里,英格兰)
……
1、下载并解压,得出pdf文件
2、如果打不开本文件,别着急,这时候请务必在3322软件站选择一款阅读器下载哦
3、安装后,再打开解压得出的pdf文件
4、以上都完成后,接下来双击进行阅读就可以啦,朋友们开启你们的阅读之旅吧。
方法二:
1、可以在手机里下载3322软件站中的阅读器和百度网盘
2、接下来直接将pdf传输到百度网盘
3、用阅读器打开即可阅读
作者介绍:
塔皮奥.拉赫登迈奇(Tapio.Lahdenmaki),数据库性能顾问,教授通用索引设计课程。他在IBM公司工作了三十多年,是公司全球课程中有关DB2(for.z/OS)性能相关课程的主要作者。Michael.Leach,关系型数据库顾问,已从IBM公司退休,他拥有二十年的应用系统及数据库课程的教授经验。两位作者的文章均被翻译成了多国语言广为传播。他们有关索引设计的方法被成功应用于许多核心系统。精彩书评:
★这本写作于2005年的著作,是少数能够穿越十年仍然历久弥新的经典著作之一。译者曹怡倩和赵建伟是支付宝的资深数据库专家,也是童家旺的得意门生,他们的经验和理解为本书增色良多。我在学习过程中也曾经从本书的英文版中获益……——盖国强(Oracle ACE总监,云和恩墨创始人)
★在工程领域,很多数据库工程师们都积累了对于索引设计与优化的经验,可惜很少有书籍系统地介绍这部分内容,这导致网上存在很多错误的观念。可喜的是本书详细介绍了一种简单、高效的数据库索引设计方法,可让读者对数据库的索引设计快速进阶。
——姜承尧(网易杭州研究院数据库技术组负责人)
免责声明:
来源于网络,仅用于分享知识,学习和交流!请下载完在24小时内删除。禁用于商业用途!如果您喜欢《数据库索引设计与优化》,请购买正版,谢谢合作。
爱学习,请到3322软件站查找资源自行下载!
数据库索引设计与优化目录:
第1 章 概述关于SQL 性能的另一本书
不合适的索引
误区和误解
误区1:索引层级不要超过5 层
误区2:单表的索引数不要超过6 个
误区3:不应该索引不稳定的列
示例
磁盘驱动器使用率
系统化的索引设计
第2章 表和索引结构介绍
索引页和表页
索引行
索引结构
表行
缓冲池和磁盘I/O
从DBMS 缓冲池进行的读取
从磁盘驱动器进行的随机I/O
从磁盘服务器缓存进行的读取
从磁盘驱动器进行的顺序读取
辅助式随机读
辅助式顺序读
同步I/O 和异步I/O
硬件特性
DBMS 特性
页
表聚簇
索引行
表行
索引组织表
页邻接
B 树索引的替代品
聚簇的许多含义
第3 章 SQL 处理过程
简介
谓词
评注
优化器及访问路径
索引片及匹配列
索引过滤及过滤列
访问路径术语
监控优化器
帮助优化器(统计信息)
帮助优化器(FETCH 调用的次数)
何时确定访问路径
过滤因子
组合谓词的过滤因子
过滤因子对索引设计的影响
物化结果集
游标回顾
方式1:一次FETCH 调用物化一条记录
方式2:提前物化
数据库设计人员必须牢记
练习
第4 章 为SELETE 语句创建理想的索引
简介
磁盘及CPU 时间的基础假设
不合适的索引
三星索引——查询语句的理想索引
星级是如何给定的
范围谓词和三星索引
为查询语句设计最佳索引的算法
候选A
候选B
现今排序速度很快——为什么我们还需要候选B
需要为所有查询语句都设计理想索引吗
完全多余的索引
近乎多余的索引
可能多余的索引
新增一个索引的代价
响应时间
磁盘负载
磁盘空间
一些建议
练习
第5 章 前瞻性的索引设计
发现不合适的索引
基本问题法(BQ)
注意
快速上限估算法(QUBE)
服务时间
排队时间
基本概念:访问
计算访问次数
FETCH 处理
主要访问路径的QUBE 示例
使用满足需求的成本最低的索引还是所能达到的最优索引:示例1
该事务的基本问题
对该事务上限的快速估算
使用满足需求的成本最低的索引还是所能达到的最优索引
该事务的最佳索引
半宽索引(最大化索引过滤)
宽索引(只需访问索引)
使用满足需求的成本最低的索引还是所能达到的最优索引:示例2
范围事务的BQ 及QUBE
该事务的最佳索引
半宽索引(最大化索引过滤)
宽索引(只需访问索引)
何时使用QUBE
第6 章 影响索引设计过程的因素
I/O 时间估算的验证
多个窄索引片
简单就是美(和安全)
困难谓词
LIKE 谓词
OR 操作符和布尔谓词
IN 谓词
过滤因子隐患
过滤因子隐患的例子
最佳索引
半宽索引(最大化索引过滤)
宽索引(只需访问索引)
总结
练习
第7 章 被动式索引设计
简介
EXPLAIN 描述了所选择的访问路径
全表扫描或全索引扫描
对结果集排序
成本估算
数据库管理系统特定的EXPLAIN 选项及限制
监视揭示现实
性能监视器的演进
LRT 级别的异常监视
程序粒度的均值是不够的
异常报告举例:每个尖刺一行
问题制造者和受害者
有优化空间的问题制造者和无优化空间的问题制造者
有优化空间的问题制造者
调优的潜在空间
无优化空间的问题制造者
受害者
查找慢的SQL 调用
调用级别的异常监视
Oracle 举例
SQL Server 举例
结论
数据库管理系统特定的监视问题
尖刺报告
练习
第8 章 为表连接设计索引
简介
两个简单的表连接
例8.1:CUST 表作为外层表
例8.2:INVOICE 表作为外层表
表访问顺序对索引设计的影响
案例研究
现有索引
理想索引
理想索引,每事务物化一屏结果集
理想索引,每事务物化一屏结果集且遇到FF 缺陷
基本连接的问题(BJQ)
结论:嵌套循环连接
预测表的访问顺序
合并扫描连接和哈希连接
合并扫描连接
例8.3:合并扫描连接
哈希连接
程序C:由优化器选择MS/HJ(在现有索引条件下)
理想索引
嵌套循环连接VS
嵌套循环连接VS
嵌套循环连接VS.理想索引
连接两张以上的表
为什么连接的性能表现较差
模糊的索引设计
优化器可能选择错误的表访问路径
乐观的表设计
为子查询设计索引
为UNION 语句设计索引
对于表设计的思考
冗余数据
无意识的表设计
练习第9 章 星型连
接
介绍
维度表的索引设计
表访问顺序的影响
事实表的索引
汇总表
第10 章 多索引访问
简介
索引与
与查询表一同使用索引与
多索引访问和事实数据表
用位图索引进行多索引访问
索引或
索引连接
练习
第11 章 索引和索引重组
第12 章 数据库管理系统相关的索引限制
第13 章 数据库索引选项
第14 章 优化器不是完美的
第15 章 其他评估事项
第16 章 组织索引设计过程
参考文献
术语表
索引
前言/序言:
关系型数据库至今已存在了三十多年。在其发展早期,由于硬件资源限制及优化器成熟度的不足,性能问题非常普遍,因此性能成为了人们优先考虑的事项。但现在情况已经不同了,硬件及软件以超出人们想象的速度发展了起来,系统已经能够自己关心自己的性能了,这在之前看来是不可思议的!但比这些资源增长速度更快的是随之产生的大量信息以及这些信息所衍生出的活动。另外,有一个重要的硬件还没有跟上整体的发展速度:虽然磁盘已变得更大且异常廉价,但它们的访问速度仍相对较慢。因此,许多老问题其实并没有消失——它们只是变换了形式。这其中的有些问题可能会造成巨大的影响——那些所谓的应该只需运行不到一秒的“简单”查询实际却运行了几分钟或更久,尽管所有的书中都写了如何正确编写查询、如何组织表,以及应当按照什么规则来决定将哪些列添加至索引上。所以,很明显,我们需要有一本能够突破常规的书,真正开始思考为何现今仍有这么多人还会遇到如此多的问题。为了满足这一需求,我们认为必须关注两个问题。第一个必须关注的对象是关系型系统中用于确定如何以最高效的方式查询所需数据的部分(我们称其为SQL优化器)。第二个必须关注的是索引及表是以何种方式被扫描的。我们试着把自己放在优化器的角度思考问题,也许当我们理解为什么可能存在问题时,我们就能够做出改变。幸运的是,我们需要知道的有关优化器的内容其实非常少,但非常重要。本书与其他同领域的书籍的一个很重要的区别在于,我们不会提供大量的用于指导SQL编写以及表和索引设计的规则和语法。这不是一本告诉你在各种场景下应当使用哪一个SQL.WHERE语句的书,也不是一本告诉你应当使用什么语法的书。如果我们努力遵循一大堆复杂、模糊甚至可能不完整的指导原则,那么我们就是在走前人走过的老路。相反,如果我们能够理解SQL 请求对关系型系统造成的潜在影响,并知道如何控制这一影响,那么我们就能够理解、控制、最小化甚至避免这些问题。
本书的第二个目的是展示如何使用这些知识从CPU和执行时间的角度量化运行过程。只有这样,我们才能真正判断我们设计的表和索引是否合适,我们需要用真实的数字来展示优化器是如何思考的、扫描将耗费多少时间,以及需要进行哪些改动以提供满意的性能。不过,最重要的是,我们必须能够方便且快速地完成这一评估过程,这就要求我们必须将关注点放在少数几个真正重要的问题上,而不是将关注点放在那些不那么重要的细节上(许多人都被这些细节问题困扰过)。所以,关键就是要关注少数核心领域,并能够说出这需要花费多少时间或成本。
同样是由于我们专注于核心问题,所以我们还能提供另一个优势。对于那些可能使用多个关系型产品(即便来自相同的供应商)的人,由于我们在本书中所使用的是一种适用于所有关系型产品的通用方法,所以使用者就不需要阅读和掌握多套截然不同的规则和建议。所有“真正的”关系型系统的优化器都有一个相同的任务:它们都必须要扫描索引和表。它们都使用异常相似的方式来处理这些操作(虽然他们对其有各自不同的描述方式)。当然,它们之间的确存在着一些差异,但是我们可以毫不费力地处理这些不同。
也正是由于相同的原因,本书的读者对象包括:认为了解SQL性能方面的知识或如何有效设计索引的知识能给自己带来益处的人,直接负责索引设计的人,编写SQL语句用于查询或作为应用程序一部分的人,以及那些负责维护关系型数据和关系型环境的人。只要你觉得需要对自己所做的事情的性能影响负责,那么你都将不同程度地从本书中受益。
最后,用一句话概括本书目标读者所需具备的背景知识:我们假定读者已经具备了SQL这一关系型语言相关的知识。考虑阅读本书的人应该已经具备了对计算机系统的大体理解。除此以外,能帮到读者的最重要的品质也许就是对事物运行原理的好奇和兴趣了,还有想把事情做得更好的渴望。另一方面,在众多拥有几十年的关系型系统经验的人中,有两类人也会从本书受益:第一类是那些根据详细的规则手册良好地管理了系统很多年的人,他们想通过理解这些规则适用的原因来使自己的工作更轻松一些;第二类是那些已经使用了本书中所描述的技术很多年,但对于新硬件所带来的改善并不赞赏的人。
本书中的绝大部分观点及使用的技术都是原创的,因此很少有对外部出版物及其他作者成果的引用。在本书的创作过程中,我们非常感谢给予了我们如此多帮助和鼓励的朋友及同事们。感谢Matti.Sthl在全书撰写过程中所给予的详细指点及批判性但极其有用的建议。感谢Lennart.Henng、Ari.Hovi、Marja.K.rmeniemi和Timo.Raitalaakso的帮助和校对,也感谢Akira.Shibamiya在关系型性能公式上的原创工作。另外,还要感谢许许多多的学生和数据库顾问们,感谢他们提供的对于实际问题及其解决方案的深入见解。最后,特别感谢Meta 和Lyn,没有他们的鼓励与支持,本书不可能完成,Meta 还特别为本书设计了封面,与全书的主旨非常契合。
Tapio Lahdenm?ki(斯姆勒尼科,斯洛文尼亚)
Michael Leach(什鲁斯伯里,英格兰)
……
下载说明:
方法一:1、下载并解压,得出pdf文件
2、如果打不开本文件,别着急,这时候请务必在3322软件站选择一款阅读器下载哦
3、安装后,再打开解压得出的pdf文件
4、以上都完成后,接下来双击进行阅读就可以啦,朋友们开启你们的阅读之旅吧。
方法二:
1、可以在手机里下载3322软件站中的阅读器和百度网盘
2、接下来直接将pdf传输到百度网盘
3、用阅读器打开即可阅读
展开更多
数据库索引设计与优化-带书签pdf高清中文电子版下载地址
- 需先下载高速下载器:
- 专用下载:
- 其它下载: