关闭

SQL Server与Oracle数据库在查询优化上的差异

发表于:2012-4-27 10:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:zy950(CSDNblog)    来源:51Testing软件测试网采编

  三、大表查询优化。

  一般来说,在数据库设计中,数据库设计人员会利用索引等技术来提高数据库的查询效率。但是,索引的作用,也不是无限扩大的,它受到一定的限制。一般来说,他跟数据量是成反比的,当数据量越大时,他的作用就越小。确切的说,刚开始时随着数据量的增大其对数据库查询的优化作用会逐渐增大;但是,当数据数量累积到一定程度时,其效果就会逐渐减小。当数据量达到一定的程度,如一百万条时,索引的作用就非常微小了。

  针对这种大容量记录的表,若需要查询,其查询效率不高。为此,数据库该采用什么方式来提高这个大表的查询效率呢?

  这两大数据库不约而同的采用了哈希族的方式,来提高大表的查询。

  如现在在设计一个图书馆管理系统,这个系统中,读者的信息有几百万、几千万条。当读者的信息存储在一个普通表中的时候,这些记录按照存储到数据库中的先后顺序,物理地保存到分配的块中。也就是说,数据库服务器的数据文件,或者数据表,就好像一个个抽屉,数据库是按先后顺序一条记录一条记录地从上到下存放数据。当整个表的容量逐渐增加时,该表相应的速度就会非常慢。

  在刚开始的时候,人们想到了利用镞表的方式来提高这个性能。也就是说,把整个抽屉分成几排,然后每排给他们归一类,如按办图书卡时的年龄进行分类,10岁以下的一类,10岁到15岁的一类等等。如此的话,在存读者信息的时候,就不会简单的按照办卡时间来存储,而是按照类别来存储。如果是属于10岁到15岁整个类,就会被物理的存储在同一个系列的块中。如此的话,就可以分类查找信息的速度。如果可以按类别查找数据信息,速度会非常快。

  但是,随着数据库中的镞块增加,会影响数据库的整体运行性能。这个问题发生之后,数据库开发人员又想到了利用哈希函数来解决这个问题。哈希函数将会给定一个数值用来限定镞块数的数量的预计范围。

  也就是说,现在我们要建立一个图书馆用户的表格,我们可以利用图书卡的卡号作为镞主键将有利于数据的存储分布。但是,当读者增加时,就需要使用一个哈希函数来约束镞块的数量。

  不过Oracle数据库在使用镞技术来优化大表数据查询之外,还采用了另外一种独有的技术,即分区表的形式,来提高用户对于大表的查询效率。

  在Oracle数据库中,可以将一个大表分开放置在几个逻辑分区中,或者是将一个大表分成几张小表。在查询时,即可以单独的对这些小表进行查询,而且,也可以利用union all参数进行一起查询。

  如在设计销售订单管理系统时,我们可以按年度把销售订单表分割成几张小表,如此的话,后续的查询效率会比一张大表高很多。不过,这个技术的应用,关键在于如何对表进行分割,以及如何把表放置在几个逻辑分区中,这需要有一定经验的数据库设计工程师才能设计出一个好的方案。关于这方面的内容,在后续的文章中,笔者会有所阐述。

  四、在SQL语句上的查询优化。

  前台的应用程序要在数据库服务器上起作用,最终靠的都是应用程序中的一条条SQL语句。据不完全统 计,SQL语句消耗了数据库服务器80%左右的资源。所以,如何提高SQL语句的执行效率,是在数据库查询 优化中必须要考虑的一个问题。

  但是,在实际工作中,许多程序员有个误区,他们认为数据库查询优化不是他们的事情,而应该是数 据库管理系统的任务,这是很多程序员的一个错误认识。他们错误地认为,他们所开发的应用程序的性能 ,跟他们所编写的SQL语句关系不大。一个好的查询语句往往可以使得应用程序的性能提高数十倍,而且 ,随着记录量的增加,这个效果还会以几何级数上升。

  另外,SQL语句是独立于程序设计逻辑的,也就是说,无论你的业务逻辑是怎么设计的,最后分解成 SQL语句,就是那么几个语法,所以,相对于应用程序源代码的优化,SQL查询语句的优化在时间与风险上 ,都要低许多。

  对于SQL语句的优化,Oracle数据库与SQL Server数据库有类似的地方,也有一些差异。下面笔者就这 两者的差异与共同点做一个综合介绍。

  1、通过索引来提高SQL语句的执行效率。

  一般来说,对于一些经常需要查询的表,如产品信息表,我们可以通过建立外键来提高查询效率。但 是,也不是说每个字段都要指定为外键。对于一些没有指定外键的字段,我们可以为其建立索引,来提高 数据表的查询效率。

  一般情况,在以下几种情况下,我们可以为表建立索引来提高SQL语句的执行效率。

  一是对于一些经常需要查询的表,我们出于某种考虑,没有设置外键,而是通过设置索引来提高对于 表的查询效率。在数据库表中,外键的设置往往受到一些限制;而相对于外键来说,索引的限制则要小得 多。所以,在一些不使用外键的情况下,我们可以采用索引来提高对于表的查询效率。

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号