图5-14考虑索引生成标准从根本上来说创建索引是为了加快查找速度。但如果创建特定索引,反而会对整体执行性能造成不良影响。因此为确定特定表的索引构成,需要调查访问表的SQL的访问模式,并基于调查结果做出综合性的判断。此外,添加索引时最好计算查找负载量减少和DML负载量增加造成的大致损益。因此生成两个索引对整个系统较为有效。......
2023-11-01
在关系型数据库中最常使用的索引就是B*树状索引(balance*tree index)。 B*树状索引具有树形结构。该结构先将指定值与列表中间点的值进行比较,如果该值更大将舍弃列表值小的一半;如果该值更小则舍弃列表值大的一半,直到发现一个值或列表结束前将重复进行此操作进行搜索。在图3-1中root列表的中间值 F保存到 root-Level的数据块中。然后以中间值为标准,将较小值和较大值的信息分别保存到 branch level的左右数据块中。当然,branch level数据块的信息也会一同保存至 root level数据块。最后 leaflevel数据块中将同时保存生成表索引的列信息和ROWID信息,完成B*树。
图3-1 B*树原理
下面介绍如何使用B*树索引搜索数据。首先假设用户搜索FIFA资料信息。先以索引方式生成包含FIFA的列。然后对WHERE子句创建并运行SQL语句,以便查找FIFA值。然后服务器在分析该SQL语句时,条件子句的FIFA值列便会知道已生成索引,先从索引的 root-level进行搜索。FIFA比root-level的值大,因此会移动到右侧 branch,然后向位于最左侧的branch移动,最后移动到leaf-level便能找到所需资料。由于应用二分法扫描,资料搜索量减少50%,可以得到良好的性能。
B*树的特征如下:
(1)最常用作 Oracle的默认索引。
(2)用于选择度良好的列时可保证良好的性能。
(3)列中的NULL值较多时,若生成索引可有效搜索数据。
(4)连接时如果用于经常同时使用的列,则能保证良好的性能。
(5)列中不使用函数或运算符而且经常用于WHERE子句时可以使用。不适合随函数或运算符变化的列。
(6)在等值查询、范围查询、少量查询中可保证良好的性能。
为更好地调优,应充分了解B*树索引的缺点。以下为B*树索引的缺点:
(1)在B*树索引中,实际列值也应保存在索引中,因此管理大容量数据时可能会成为负担。
(2) B*树索引的列值选择度良好才能保证性能良好。
(3)在组合索引中,不使用条件的列或非同等条件的列位于组合索引中时会降低访问效率。(www.chuimin.cn)
(4)为兼容多种访问模式(access pattern),需要使用大量的索引。
(5)使用NOT或NULL,或者使用复杂的OR条件时无法保证索引的性能。
(6)存储空间浪费。在表列值和集内,B*树索引作为以排序形式保存相应数据ROWID的结构,相同值的物理地址不同时会重复保存相同的值,会造成存储空间浪费。此时,表列值的长度较大时将保留index的原始值,使Index的大小增大。
(7)灵活性(flexibility)缺乏。在B*树Index中,访问相同的表时将并行使用两个以上的索引,因此有许多限制。但在实际业务环境中用户的要求多种多样。为满足这些要求,要创建表中所有列组合数的B*树index数,此时可能会出现index的大小反而比表更大的奇怪现象。此外,管理各个索引的成本可能会超出管理表本身的成本。因此,可以说是无法应用到实际业务中的情况。
(8)如果有两个选择度良好的B*树索引,要同时使用两个以上的索引时会有某些限制条件。所以B*树索引可使用多种选项:
① UNIQUE INDEX: UNIQUE INDEX的优点是使用时可以不包含使用索引的列的重复值。在primary key和unique限制条件下生成的索引为unique索引。生成Script :
CREATE UNIQUE INDEX [index name]ON table(column);
② NON-UNIQUE INDEX: NON-UNIQUE INDEX可包含使用索引的列的重复数据值。生成Script :
CREATE INDEX [index_name]ON table(column);
③ CONCATENATED INDEX:组合索引通常用于比较搜索两个列时。如果生成的组合索引为index ON table(A, B, C),则从前面开始按顺序进行排序。即对A列进行排序后再对B列进行排序,对B列进行排序后再对C列进行排序。且生成索引时,应将条件搜索时重要的条件(列)放在最前面。
A.SELECT * FROM table WHERE A=20 AND B=30 AND C=10;
B.SELECT * FROM table WHERE A=20时较快。
C.SELECT * FROM table WHERE C=20 AND B=30 AND A=10;时 INDEX不起作用。
采用A和B时,生成组合索引时表现出良好的性能。但用C时,组合索引不起作用。在以下章节中将进一步说明组合索引使用的相关内容。
有关数据库性能管理与调优的文章
图5-14考虑索引生成标准从根本上来说创建索引是为了加快查找速度。但如果创建特定索引,反而会对整体执行性能造成不良影响。因此为确定特定表的索引构成,需要调查访问表的SQL的访问模式,并基于调查结果做出综合性的判断。此外,添加索引时最好计算查找负载量减少和DML负载量增加造成的大致损益。因此生成两个索引对整个系统较为有效。......
2023-11-01
为根据不同情况使用适当的索引,要学习各种类型的索引。因为只有明确了解表和索引的概念才能轻松解决复杂的内容。创建索引抽屉时,应考虑偶有发生的损益分歧点,考虑是否创建。总体来说,索引是用户使用SQL语句查找时为提高查找速度而创建的对象。但若创建太多索引,购买新书或废弃时,会产生额外的维护费用。这是由于添加或删除书籍时应更新现有的索引抽屉。......
2023-11-01
目前为止主要介绍了索引的概念,现在开始介绍哪种情况要使用索引。为正确使用索引,应熟练掌握以下五个内容:理解索引和表的大小、访问范围对性能的影响,熟练掌握相关索引的正确使用方法。了解组合索引的使用标准和使用方案。与查找相比DML的负担更大时,执行较多DML语句时若使用索引则会成为降低系统性能的原因。......
2023-11-01
为解决此问题设计了IOT索引。IOT因为已在索引中添加了表结构,读取索引便能完成所有操作。IOT表面上来看是表,实际上是以主关键字为根据的索引,需要将主关键字作为前提条件使用。 IOT的索引行包含索引关键字值和non-key值。 IOT的索引中没有ROWID信息。普通表和IOT表的差别主要有以下几点:普通表以ROWID区分行,IOT以PK区分行。 IOT无法设置unique限制条件。 IOT比普通表节省存储空间。 IOT必须生成 primary key。......
2023-11-01
1)分析阶段在分析阶段进行分析时需考虑整体性能和稳定性,此时业务流程优化、系统结构设置、容量计算非常重要。在业务流程优化期间,系统进行电算化的同时改善低效率流程,以提高整体性能。2)设计阶段相比逻辑性设计,在进行数据物理设计时需要考虑与性能相关的操作。4)测试和运行阶段最后的测试和运行阶段可执行的操作包括应用程序调优、数据库调优、OS调优等。图1-1按项目阶段进行数据库性能管理......
2023-11-01
实例已启动意味着数据库系统运行所需的后台进程已启动,并且处于“确保内存可用于数据处理”的状态,这种实例的调优将成为DBMS性能调优的重要基础。1) DBMS 内存 区域——SGASGA 是作为实例启动时确保控制器信息保存和数据处理空间的内存区域,存在于实例访问的所有进程共享的内存区域中。SGA相关调优的基准基本以命中率评价为主,通过适当地调整相关参数,将实际运行反映到评价结果中。......
2023-11-01
对系统的优化是一项重要的工作,同时也是一个复杂的任务。本节将介绍两种性能优化的方式,优化SQL查询和优化数据库服务器。给employee表增加索引后,索引会按编号对行进行排序,当查找记录时,MySQL会先查找索引以找到匹配的记录,找到后程序结束执行。......
2023-10-29
在制定由优化器执行的SQL语句的执行计划过程中,提示为用户提供了可直接进行介入的方法。提示是用户对优化器下达的指示,但优化器可能会忽略不合理的提示。意味着除了RULE和DRIVING_SITE外的所有提示将选择CBO用作优化器。使用Orange Template Browser查看优化器提示如图2-8所示。图2-8Orange Template Browser查看优化器提示单击方框部分图标()、单击最顶端菜单的[View]—[Template Browser]或按快捷键 Alt+F2则会运行[Template Browser]。......
2023-11-01
相关推荐