Oracle查询优化技术在电子对抗情报系统中的应用

时间:2022-05-22 09:32:02 来源:网友投稿

摘要:通过对电子对抗情报系统中侦察情报统计查询特点的分析,利用oracle查询优化常用有效技术,提高了电子侦察情报系统前台侦察目标统计查询的速度。

关键词:Oracle;查询优化;报文统计;索引;实体化视图

中图分类号:TP311.13 文献标识码:A文章编号:1007-9599 (2011) 13-0000-02

Oracle"s Query Ooptimizer Technology Using in Electronic Countermeasures Intelligence System

Zhao Chundong

(Office 28 Nanjing,Nanjing210007,China)

Abstract:The electronic warfare intelligence reconnaissance systems analysis of statistical characteristics of queries,query optimization oracle commonly used and effective use of technology to improve the prospects of electronic reconnaissance surveillance target system statistics query.

Keywords:Oracle;Query optimization;Packet statistics;Index;

Materialized views

在电子对抗情报系统中,经常涉及到各类侦察情报的统计查询,操作人员每天都要对当日的各类侦察情报进行查询统计,查询结果打印成报表供情报人员分析使用。随着大量侦察报文在后台oracle数据库中的不断积累,数据库表中了报文记录不断增加,高峰时可以达到百万条。操作人员在前台通过查询界面作查询操作时,查询速度变得越来越慢,导致工作效率的降低。如何提高查询速度,成了系统需要改善提高的一个方向。

下面具体阐述利用后台oracle数据库管理系统自身查询优化技术,在提高侦察情报查询速度方面的典型应用。

一、合理建立和使用索引

数据库的开发人员都知道对查询的表建立索引可以提高查询该表记录的速度。但如何建立索引,可以显著提高查询记录速度,却有些方法和规则。索引是数据库中重要的数据结构,它的核心作用就是为了提高查询效率。故在设计索引时,应保证sql语句充分使用索引。索引的建立若和经常使用的查询语句不匹配,造成虽然该表已经建立了多个字段的索引,但查询该表的记录时,查询速度没有什么变化,有的甚至反而慢了。对此若我们依据一些规则分析会查出索引建立失败的原因。

下面具体阐述索引使用的规则,并结合侦察原始情报补充表(dzz-zhen cha yuan shi qing bao-buchong),侦察原始情报动态表(dzz-zhen cha yuan shi qing bao-dongtai)为例说明。

规则一,索引的列或组合列出现在sql语句的where子句中,这是索引被用上的起码条件。

规则二,在2张表连接时,内表的某列上建立的索引,只有在NESTed Loop才能有效用到该索引。

规则三,表连接顺序影响索引的使用。如表dzz_zhenchayuanshi_buchong中列“批号”有索引,表dzz_zhenchayuanshiqingbao_dongtai中列“批号”没有索引,where语句有dzz_zhenchayuanshiqingbao_buchong.批号=dzz_zhenchayuanshiqingbao_dongtai.批号,在做NL连接时,dzz_zhenchayuanshiqingbao_dongtai作为外表,先被访问,由于连接机制原因,外表的数据访问方式是全表扫描,侦察原始情报补充表上的索引没有得到应用,失去作用。

规则四,索引列是函数的参数时,索引在查询时用不上。遇到这种情况,可以使用一些技巧,对查询语句做等效变换(不影响查询结果),迫使优化器使用索引,这样便提高了查询速度。如在电子对抗情报系统中作侦察情报分类查询时用到的sql语句,“select批号,平台类型,平台代号from侦察原始情报补充表where upper(平台代号)like‘HW%’”,可等效变换为“select批号,平台类型,平台代号from侦察原始情报补充表where upper(平台代号)like‘HW%’AND(平台代号like‘h%’or平台代号like‘H%’);优化器为WHERE子句中and联结的二个语句中每一个句子约束的条件进行扫描,由于第二个子句中没有使用函数,索引得到了应用。在二个约束条件扫描后,将查询结果合并。

规则五,查询语句中有隐藏的数据类型转换,比如字符型数据与数值型数据比较,oracle会自动调用to_number()函数将字符数据转化为数字,这样索引同样发挥不了作用。性质和规则4一样。

规则六,需要为建立索引的表收集足够的统计数据,oracle掌握了充分反映实际的统计数据,才有可能做出正确的判断。建立索引的表若平时经常有增、删、改的操作,需要定期用存储过程为表和索引进行分析。例如用sql语句“analyze table dzz_zhenchayuanshi_buchong compute statistics for all indexes;”。

规则七,索引列中数据重复并且分布均匀,索引不起作用。这种情况在电子对抗情报系统中一些常用表中出现过。典型如表侦察原始情报补充表(dzz_zhenchayuan_buchong)中有字段“平台类型”,该字段数值只有1,2,3,4(分别代表地面、海上、空中、水下),该表记录虽有几十万条,但oracle缺省认定表中列的值是在所有记录中均匀分布的,在查询语句中查询条件为

平台类型=1,字段“平台类型”上的索引将不起什么作用,其效率和全表扫描差不多。这就是索引列选择性不高原因的体现。

规则八,索引列的值若可以为空(NULL),在sql语句中那些需要返回NULL值的操作,将不会用到索引。索引不起作用。例如COUNT(*),是用全表扫描。

二、利用分区技术

数据库中的分区定义为把大型数据表和索引按照某一条件分成小的区间,对满足条件的数据查找可以只在少数几个分区中进行,故可加速查询。理论上可以建立范围分区、散列分区、混合分区等。可以从范围分区取值,也可以从散列分区、混合分区取值,散列分区和混合分区都是基于散列函数确定的分区,各分区存放的数据没有面显的规律,故对加速查询没有意义。因此只有范围分区对本系统的侦察目标查询统计具有实际应用意义。下面通过实际系统中一张表被分区的应用阐述查询速度被提高的原因。在数据库查询表中,侦察原始情报动态表表名(dzz_zhenchayuanshiqingbao_dongtai)由于存储记录量非常大,适合进行分区操作。具体实现如下:

Create table dzz_zhenchayuanshiqingbao_dongtai(

批号number(9)not NULL,

时间varchar2(16)not NULL,

方位number(5,2),

情报源内码number(9)not NULL,

探测器号number(2)not NULL

……..);

Storage(initial 200M next 200m pctincrease 0)

Partition by range(情报源内码)

(partition nm1

Values less than(10000)tablespace zcqb1,

partition nm2

Values less than(20000)tablespace zcqb2,

……..

partition nm9

Values less than(90000)tablespace zcqb9);

建立分区后进行查询:

Select*from dzz_zhenchayuanshiqingbao_dongtai partition(zcqb2)等价于

Select*from dzz_zhenchayuanshiqingbao_dongtai where情报源内码>10000

And情报源内码<20000;由于查询只限于某一区间进行,比原来从基表中查询速度快很多。由于在不同的分区中,可以根据查询条件选择相应的查询规则,增加了查询的灵活性。

由于分区中的数据是无序的,这时可以利用前面所说的索引技术,用索引和分区相结合的方法进一步加快查询速度。具体方法即建立索引分区。索引分区分二种类型:本地索引分区和全局索引分区。本地索引分区根据同基表同一分区关键列进行分区,它的分区数目和基本表一样,并随着基本表分区的改变而做相应的改变。本地索引分区不支持实施非分区式列的唯一性,全局索引分区对非分区式列实施唯一性。全局索引可以选择地进行分区,但要避免采用基表的分区方式,应采用通过范围的分区方法进行分区。

在本系统中对存储侦察定位目标的表建立了全局索引,举例如下:

Create unique index dzz_zhenchadinwei_index on dzz_zhenchadingwei_buchong

(wybiaozhi)global partition by range(wybiaozhi)

Partion wybiaozhi1 values less than(10000)tablespace wybiaozhi 1,

Partion wybiaozhi 2 values less than (20000)tablespacewybiaozhi 2,

……

Partion wybiaozhi 2 values less than(maxvalue)tablespace wybiaozhi 5;

其中maxvalue为分区边界最大值。

三、实体化视图技术

实体化视图用于汇总、预计算和分布数据的模式对象。它将算好的查询结果存储在数据库中,当用户发出查询要求,优化器先到实体化视图中去搜索,若找到满足条件的视图,就让查寻直接指向实体化视图而不是基表或视图,提高了数据库的查询速度,由于不需要直接访问数据库,减轻了数据库的负担。

实体化视图根据视图的创建过程大致分为三种类型:实体化连接视图(以执行内部或外部等同连接的查询为基础,不含聚合),单独的表聚合视图(包含聚合,不包含连接),同时包含聚合和连接的视图。

本系统每天需要统计某时间段符合多查询条件的各类侦察情报的数量,比如按装载辐射源平台类型(地面、舰艇、飞机、水下潜艇、不明)统计侦察原始情报数量,按观测站(情报来源)统计侦察定位目标数量,按辐射源类别统计侦察情报数量,按辐射源辐射参数频率段统计侦察情报数量。这些条件组合在一起,涉及多张数据库表依据不同关键字进行连接,执行一次查询生成一张详细统计结果表往往需要花费几分钟的时间,应用实体化连接视图技术减少了统计结果生成时间,实际花费的时间只是原来的几分之一不到。

下面举几例简述下在本系统中连接视图的创建方法:

Create materialized view dzz_zhenchayuanshi_view/*创建实体化连接视图(针对系统中侦察原始目标动态表和普通表这2张表)*/

build immediate refresh fast on commit as

select dzz_zhencha_comm.ph,dzz_zhencha_comm.source,dzz_zhencha_comm.ptlx,

dzz_zhencha_comm.ptmc,dzz_zhencha_dyna.fw,dzz_zhencha_dyna.time

from dzz_zhencha_comm,dzz_zhencha_dyna

where dzz_zhencha_comm.biaozhi=dzz_zhencha_dyna.biaozhi

四、结束语

本文重点论述了索引、实体化视图技术在提高oracle查询速度方面所起的作用。这也是数据库前台查询常用的优化手段,在实际工程应用上可操作性比较强。这些技术在电子对抗系统侦察目标查询统计中得到了充分应用和验证。实际上,除了本文涉及的查询优化技术,还有其他很多方法,如采用并行数据库来优化查询,将常用频繁查询的对象放在各自的磁盘上来加速查询等。因受硬件资源的限制和系统自身规模,本系统没有考虑这一优化策率。

又如建立散列数据簇优化查询,由于本系统查询表大部分都是动态表,不是相对稳定的静态表,且很多是范围查询,这一优化技术对提高查询速度作用不大,故没采用。

总之,数据库查询优化技术是门综合技术,涉及的范围很广,更深次论述还会讨论到数据库层的资源配置,网络层的流量控制甚至后台操作系统层的总体设计等系统层面问题。

推荐访问:对抗 情报 优化 系统中的应用 查询

版权所有:天海范文网 2010-2024 未经授权禁止复制或建立镜像[天海范文网]所有资源完全免费共享

Powered by 天海范文网 © All Rights Reserved.。鲁ICP备10209932号