您好, 访客   登录/注册

浅析数据库的查询优化方法及入侵检查技术

来源:用户上传      作者: 周 佳

  数据库系统作为管理信息系统的核心,各种基于数据库的联机事务处理以及联机分析处理正慢慢的转变成为计算机应用的最为重要的部分,根据以往大量的应用实例来看,在数据库的各种操作中,查询操作所占的比重最大,而在查询操作中基于SELECT语句在SQL语句中又是代价最大的语句。如果在使用中采用了优秀的查询策略,往往可以降低查询的时间,提高查询的效率,由此可见查询优化在数据库中的重要性。
  
  一、数据库的优化查询方法
  
  1、基于索引的优化
  数据库的优化方法多种多样,不同的方法对提高数据库查询效率也不相同。
  索引作为数据库中的重要数据结构,它的根本目的就是为了提高查询的效率。而优化查询的重要方法就是建立索引,建立适合关系数据库系统的索引,这样就可以避免表扫描,并减少了因为查询而造成的输入输出开销。有效提高数据库数据的查询速度,优化了数据库性能。然而在创建索引时也增加了系统时间和空间的开销。所以创建索引时应该与实际查询需求相结合,这样才能实现真正的优化查询。
  1.1判断井建立必要的索引对所要创建的索引进行正确的判断,使所创建的索引对数据库的工作效率提高有所帮助。为了实现这一点。我们应做到以下要求:在熟记数据库程序中的相关sQL语句的前提下,统计出常用且对性能有影响的语句,判断数据库系统中哪些表的哪些字段要建立索引。其次,对数据库中操作频繁的表。数据流量较大的表,经常需要与其他表进行连接的表等,要进行重点关注。这些表上的索引将对SQL语句的性能产生重要的影响。
  1.2对索引使用的一些规则索引的使用在一些大型数据库系统中会经常使用到。这样可以有效的提高数据库性能,使数据库的访问速度得到提高。但索引的使用要恰倒好处,所以我们在使用索引时应遵守使用原则:建立索引可以提高数据库的查询速度。但索引过多,不但不能实现优化查询,反而会影响到数据库的整体性能。索g作为数据库中实际存在的对象,每个索引都要占用一定的物理空间。所以对于索引的建立要考虑到物理空间容量,以及所建立索引的必要性和实用性。
  1.3合理的索引对SQL语句的意义索引建壶之后,还要确保其得到了真正的使用,发挥了其应有的作用。首先,可以通过SQL语句查询来确定所建立的索引是否得到了使用,找出没有使用到的索引。分析素引建立但没有使用的原因,使其真正发挥作用。其次,索引得到使用以后,是否得到了预期的效果,对数据库的性能是否实现了真正意义上的提高,只有合理的索引才能真正提高数据库的性能。
  2、优化SQL语句
  在使用索引时可以有效的提高查询速度,但如果SQL语句使用不恰当的话,所建立的索引就不能发挥其作用。所以我们应该做到不但会写SQL,还要写出性能优良的SQL语句。下面,就如何优化引用例子进行说明。
  首先,在进行查询时,返回的值应该是查询所需要的。在查询中应该尽量减少对数据库中的表的访问行数,使查询的结果范围最小,这就意味着在查询时,不能过多的使用通配符,如:selecf*fmm tablet语句,而应该做到最小化查询范围,要查询几行几列就选择几行几列,如:selectcoil from tablel ;多数情况下,用户并不需要查询到的所有数据,而只是部分或靠前的数据时,我们也可以通过SQL语句来进行限制查询的结果,如:select top 50 coll from tablel。
  其次,对于一些特殊的SQL语句,在使用时应正确选择。我们用一组例子来说明,如:EXISTS,NOT EXISTS。
  语句一:select sum(tt,c1)from t1where((select count(*)from t2 where t2,c2=t1,c2)>0)
  语句二:select sum“1,c1)from tl whereexists(select*from t2 where乜,c2=t1,c1)
  两个语句所得到的结果相同,但,语句二的效率要远高于语句一,因为语句一在查询中产生了大量的索引扫描。
  在对数据库查询时,所使用的语句多种多样,但选择恰当的的字句能够有效的提高查询效率。
  最后,WHERE子句在使用时应该注意的问题。
  在WHERE子句中可以使用exist和not exist代替in和not in,应该尽量避免使用in,not in,0r或者having。可以使用表链接代替exist。Having可以用where代替,如果无法代替可以分两步处理。
  
  二、数据库系统的安全
  
  数据库系统的安全框架可分为三个层次:网络系统层次、宿主操作系统层次和数据库管理系统层次。由于数据库系统在操作系统下都是以文件形式进行管理的,因此入侵者可以直接利用操作系统的漏洞窃取数据库文件,或者直接利用OS工具来非法伪造、篡改数据库文件内容。因此,数据库系统的安垒性很大程度上依赖于数据库管理系统。如果数据库管理系统安全机制非常强大,则数据库系统的安全性能就较好。根据数据库安全的三个层次,笔者提出了一个数据库入侵检测系统,其外层用基于网络的入侵检测,中间层用基于主机的入侵检测,内层采用人侵容忍。此系统采用系统整体安全策略,综合多种安全措施,实现了系统关键功能的安全性和健壮性。
  
  三、数据库入侵检测技术
  
  数据库入侵检测系统的研究与设计借鉴了针对网络和针对主机的入侵检测技术,在此基础上,又考虑了数据库自身的特点。按照检测方法分为:误用检测和反常检测。
  (1)数据库误用检测
  误用检测是指将已知的攻击特征存储在误用特征知识库里面,然后根据用户的当前操作行为与知识库里的误用人侵规则进行匹配检验,如果符合知识库中的入侵特征,则说明发生了入侵。误用特征知识库中的入侵规则由安全专家定义,可以随时添加、修改,然后保存在知识库中,用来对审计数据进行匹配比较。误用检测的优点是检测的准确率高,缺点是只能对已知的攻击特征进行匹配检验,对未知的攻击类型无法发现,而对未知攻击类型的检测要依靠异常检测。所以,误用检测常常与异常检测结合起来使用。
  (2)数据库反常入侵检测
  反常检测是指将用户正常的习惯行为特征存储在特征数据库中,然后将用户当前行为特征与特征数据库中的特征进行比较,若两者偏差足够大,则说明发生了反常。这种方法的优势在于它能从大量数据中提取人们感兴趣的、事先未知的知识和规律,而不依赖经验,应用在基于数据库的入侵检测系统中,可以从大量的数据中发现有助于检测的知识和规则。
  对于数据库的优化,我们要抓住关键问题,提出改善查询效率,这样才能真正使数据库服务得到根本提高。本文在对数据库查询优化的方法上,进行了分析,提出了部分见解,有效的提高数据雇在询数率。


转载注明来源:https://www.xzbu.com/2/view-425853.htm