数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。随着信息技术的高速发展,数据库技术日新月异,无论是市场还是国家都对数据库高并发读写、海量数据高效存储和访问、高扩展性和高可用性提出了要求。人们在数据库性能的优化上做了大量的工作,本文将要讨论的就是其中一种数据库性能优化操作--索引重组功能及其测试。
首先我们来了解一下数据库索引。数据库的表索引是对数据库表中的一列或者几列的值进行排序的一种结构。创建表索引是为了快速访问数据库表中的特定信息。索引会占用磁盘空间,而且在进行表插入、修改时,数据库需要动态维护每个索引文件,所以在一定程度上降低更新数据的速度,然而为了提高查询速度,创建索引是必须的。在一个拥有大量记录的表上建立正确的索引,好比为一本书建立了目录,确实能够加快数据库的查询速度,避免了所有查询都要进行全表扫描的问题。
索引或多或少会影响数据库更新和插入的效率,反之频繁地更新操作也会大大影响索引的性能,甚至会导致其失效。在进行了大量的数据更新操作后,索引页会被分成多块,形成严重的索引碎片,这样会降低扫描索引的速度,降低检索数据速度。发生这样的问题,一般通过sql语句或者图形化工具都能发现,在这时就需要进行索引的重组,来重新提升索引的性能。索引重组可以通过REORGANIZE语句实现,也可以通过数据库管理工具提供的图形化界面进行。
数据库索引重组是一项重要而传统的数据库优化技术。在进行数据库功能测试中,索引重组也是一个重要测试点。在设计测试案例时,测试工程师需要编制多条sql语句和存储过程,模拟在实际数据库应用场景中的每一个操作。在测试时,案例执行人员执行案例中的所有程序,并记录测试结果,可以验证索引重组的是否有效。具体测试案例如下:
首先,需要创建表单,语句如下:
create table test.tab4k(a int,b char(1024)default '这是一个数据库表索引重建的案例');;
第二步,编制并执行存储过程,在该表中插入大量数据,如:200万条。语句如下:
create or replace procedure test.indexREORG ()
as
declare
i int;
begin
i:=1;
whilei<2000000 loop
insert into test.tab4k(a) values(i);
i:=i+1;
end loop;
end;
call test.indexREORG ();
第三步,随机进行数据查询,并记录查询时间,语句如下:
select * from test.tab4k where a=1999998;
第四步,为表中某列创建索引,语句如下:
create index tab_4k_index_a on test.tab4k(a);
第五步,通过索引列进行数据查询,并记录查询时间,语句如下:
select * from test.tab4k where a=999998;
第六步,编写存储过程,模拟实际工作中的频繁删除数据操作,造成索引页碎片,语句如下:
create or replace proceduretest.deleteRecord()
as
declare
i int;
begin
i:=1;
whilei<1999990 LOOP
Delete from test.tab4k where a=i;
i:=i+100;
end loop;
end;
call test.deleteRecord();
第七步,通过索引列进行数据查询,并记录查询时间,语句如下:
select * from test.tab4k where a=99998;
第八步,进行索引列重组操作,并在此通过索引列进行数据查询,同时记录查询时间,语句如下:
select * from test.tab4k where a=199998;
通过以上步骤,能够得到数据库索引创建索引前后与索引重建前后的四组比对数据,对结果的分析,可以完成测试数据库索引重建功能,并对数据库索引重建功能有了更深的印象。为了更加接近实际情况,可以根据使用硬件设备以及测试环境的不同,增加或者减少测试基础数据,也可以在第二个存储过程中增加大量随机插入和更新数据操作,以取得更好的测试效果。