首页 理论教育设计数据库索引的注意事项

设计数据库索引的注意事项

【摘要】:设计索引时应注意以下事项:1)对大容量表应用索引根据 DB_ BLOCK_SIZE参数值确定大容量表的标准。要使用索引的列值选择度良好时并不受影响,但选择度良好条件和不良条件同时存在的情况时,为性能考虑最好使用索引。在这种情况下,对选择度良好的列使用索引,对选择度不良的列使用全表扫描,从而确定执行计划。因此,使用索引时应始终充分全面地考虑后慎重进行。

设计索引时应注意以下事项:

1)对大容量表应用索引

根据 DB_ BLOCK_SIZE参数值确定大容量表的标准(参数值在 init.ora中定义)。“表的大小超过 6块时请使用索引。”这种说法较为常见。这句话表示 DB_BLOCK_SIZE参数值为 8 K(8192 byte)时,大小超过 49,152 byte(=48 K=8 K * 6块)的表称为大容量表,此处建议应用索引。那为何对容量小的表不适合设置索引?那是由于对较小的表使用索引时,性能可能比全表扫描方式差。全表扫描时,根据DB_ FILE_ MULTIBLOCK_ READ_COUNT参数中定义的值决定可读表块。因此扫描容量小的表时,与逐个值比较的索引相比,一次读取多个块的全表扫描能实现更好的性能。在Orange中,不进行特定查询查找就能在[Database Information]—[System Parameter]中查找并修改参数值。图3-4所示为在 Database Information中查找 db_file_multiblock_read_count。

图3-4 在Database Information中查找db_file_multiblock_read_count

2)满足条件值的选择度在10%~15%以下时生成索引可以保证最佳性能

在学习这部分内容之前,有必要对选择度进行更为深刻的了解。相信大家一定都有这样的体验:我们在学习数据库时,常常因为“选择度”这个概念造成诸多混淆。我们自以为对选择度的概念非常了解,但通过广泛阅读数据库相关书籍,我们发现选择度的好坏不仅可以用好、坏来描述,还可以用宽、窄来描述。并通过该表达方式从索引选择中排除选择度不良的列。这是因为存在多种情况。下面介绍通过多种方式使用的选择度:

(1)选择度不良=值较大=范围广。这三种方法所表达的意思相同。可将性别作为选择度不良时的典型例子,因为性别非男即女,至少有50%以上的高选择度值,因此选择度不良。

(2)选择度良好=值较小=范围窄;这三种方法所表达的意思相同。选择度良好的典型例子为人名最前面的姓氏中福的姓,其选择度非常好。前100个姓氏总人口占全国人口的84.77%,但福姓却不到1■。每个人学习数据库的方法各不相同,但笔者认为最好的方法就是在脑海中或在草稿纸上画出表格,一步一步按数据处理过程执行,这是最容易理解的方法之一。无法理解书中的字面意思时该方法非常有效。

3)最新的DBMS提供多种索引类型,要在适时适宜的地方使用最适合的索引

最新的DBMS提供多种类型的索引。默认情况下提供B*树索引、倒序索引、降序、基于函数、IOT、BITMAP、组合索引等不同性质的索引,用户应学习多种索引类型,在适时适宜的地方有效使用索引。本文后续将详细介绍各种索引种类。

4)即便选择度不良,要进行部分范围处理时也可使用索引(www.chuimin.cn)

表的数据分布非常多样化,包括列值的选择度非常好的表、列中某些值的选择度良好的表、某些值的选择度太差的表等。要使用索引的列值选择度良好时并不受影响,但选择度良好条件和不良条件同时存在的情况时,为性能考虑最好使用索引。在这种情况下,对选择度良好的列使用索引,对选择度不良的列使用全表扫描,从而确定执行计划。因此,用户直接确定执行计划时可使用HINT子句。

5)生成索引时应充分考虑物理存储空间

生成表空间时要考虑物理大小。其原因多种多样,但其中一个原因是生成索引时会重新生成索引表,因而需要不少存储空间。使用索引的确会使性能良好,但随意使用太多索引则会浪费存储空间,可能出现要重新设计表空间的情况。因此,使用索引时应始终充分全面地考虑后慎重进行。例如:

Plan Tool:将通过 SQL Monitor或 Session Monitor、Lock Monitor提取的SQL传输到Plan Tool进行调优操作。Plan Tool具有查看执行计划、查看模式信息、执行跟踪(Trace )、执行SQL等功能。Plan Tool为视觉效果提供对输入的SQL执行FORMATTING的功能,同样以树形显示执行计划,对于复杂的执行计划,可对树Expand/Collapse并进行调整,或使用竖向显示方式以方便了解整个步骤。此外,仅通过双击执行计划的各个步骤,便可在弹出窗口中立即查看与该步骤相关的对象信息和统计信息,而且能在独立选项卡上一次查找与整个SQL语句相关的所有对象信息。(笔者认为每次调优SQL时要一一使用脚本确认相关索引和数据数、列分布等信息非常麻烦,但在Orange中仅通过双击就能查看这些信息,可以方便快速地进行操作。) Plan Tool如图3-5、图3-6所示。

Plan Tool最大的优点是可以实时执行跟踪和格式化,仅通过单击操作便能对相应会话设置跟踪操作,然后执行SQL,再从服务器提取跟踪文件并格式化为TKPROF等格式后显示。此外,可以从1、4、8、12中选择跟踪级别并执行。最后,Plan Tool的重要功能之一是能以独立的选项卡区分原始SQL和调优SQL,操作时可以比较各个执行计划、模式信息、跟踪结果等,再将所有调优操作结果进行保存,日后进行提取便可查找开始操作时的执行计划、统计信息和对象的现状等全部信息,对实际操作非常有效。以下是查看Plan Tool的跟踪和脚本信息的画面。

图 3-5 Plan Tool(一 )

图 3-6 Plan Tool(二 )