暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
GBase8s数据库调优-2
563
22页
10次
2020-08-24
免费下载
人们在使用

时往往会陷入一个误区,即太关注于所得的结果是否正确,
而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或
是复杂的数据库环境中(如联机事务处理

或决策支持系统

)中表现
得尤为明显。笔者在工作实践中发现,不良的

往往来自于不恰当的索引设
计、不充份的连接条件和不可优化的

子句。在对它们进行适当的优化后,
其运行速度有了明显地提高!下面我将从这三个方面分别进行总结:
为了更直观地说明问题,所有实例中的

运行时间均经过测试,不超过1
秒的均表示为(

秒)。
测试环境
 主机:

 主频:

 内存:

 操作系统:

 数据库:

、不引设
例:表
 !"
#
行,试看在不同的索引下,下面几个

的运行
情况:
1.
DATE
上建有一个非群集索引
$ % !&'%()*+!, !""%-.///.'""%
.///.'",!&'%-(
*
$ %"%0&,(,!&'%*+!, !"1!&"%(
*
$ % !&'%()*+!, !""%-.////.'"$ 
2'(.34.0..*(5
*
分析:
"%
上有大量的重复值,在非群集索引下,数据在物理上随机存放在数据页
上,在范围查找时,必须执行一次表扫描才能找到这一范围内的全部行。
2.
DATE
上的一个群集索引
$ % !&'%()*+!, !""%-.///.'""%
.///.'",!&'%-

秒)
$ %"%0&,(,!&'%*+!, !"1!&"%

秒)
$ % !&'%()*+!, !""%-.////.'"$ 
2'(.34.0..*

秒)
分析:
在群集索引下,数据在物理上按顺序在数据页上,重复值也排列在一起,因
而在范围查找时,可以先找到这个范围的起末点,且只在这个范围内扫描数据
页,避免了大范围扫描,提高了查询速度。
3.
PLACE
DATE
AMOUNT
上的组合索引
$ % !&'%()*+!, !""%-.///.'""%
.///.'",!&'%-
#
秒)
$ %"%0&,(,!&'%*+!, !"1!&"%
5
秒)
$ % !&'%()*+!, !""%-.////.'"$ 
2'(.340..*

秒)
分析:
这是一个不很合理的组合索引,因为它的前导列是
$ 
,第一和第二条

没有引用
$ 
,因此也没有利用上索引;第三个

使用了
$ 
,且
引用的所有列都包含在组合索引中,形成了索引覆盖,所以它的速度是非常快
的。
4.
DATE
PLACE
AMOUNT
上的组合索引
$ % !&'%()*+!, !""%-.///.'""%
.///.'",!&'%-(
*
$ %"%0&,(,!&'%*+!, !"1!&"%

秒)
$ % !&'%()*+!, !""%-.////.'"$ 
2'(.34.0..*

秒)
分析:
这是一个合理的组合索引。它将
"%
作为前导列,使每个

都可以利用
索引,并且在第一和第三个

中形成了索引覆盖,因而性能达到了最优。
5.
总结:
缺省情况下建立的索引是非群集索引,但有时它并不是最佳的;合理的索引
设计要建立在对各种查询的分析和预测上。一般来说:
 有大量重复值、且经常有范围查询(
%'0-0
-606
)和
!"

1!&
发生的列,可考虑建立群集索引;
 经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
 组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。
、不接条
例:表
"
5/#
行,在
"7'!
上有一个非聚集索引,表
 !&'%
/
行,在
 !&'%7'!
上有一个非聚集索引,试看在不同的表连接条件
下,两个

的执行情况:
$ %&,(,!&'%*+!, !&'%0 " "7'!6
 "7'!

秒)

改为:
$ %&,(,!&'%*+!, !&'%0 " "7'!6
 "7'!'" !&'%7'!6 !&'%7'!

秒)
分析:
在第一个连接条件下,最佳查询方案是将
 !&'%
作外层表,
"
作内层表,
利用
"
上的索引,其
8
次数可由以下公式估算为:
of 22
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜