加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2016-08-19 08:53:55 所属栏目:MsSql教程 来源:站长网
导读:四、在SQL语句上的查询优化。 前台的应用程序要在数据库服务器上起作用,最终靠的都是应用程序中的一条条SQL语句。据不完全统 计,SQL语句消耗了数据库服务器80
四、在SQL语句上的查询优化。

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

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

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

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

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

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

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

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

二是在需要频繁进行排序或者分组的表上,建立索引,可以极大地提高查询效率。如ERP系统在设计的 时候,可能需要频繁地查询采购订单明细,而且,这份报表是需要根据采购订单的号码进行排序。如此的 话,在数据库设计的时候,就可以把采购订单的号码设置为索引,在每次运行采购订单明细作业的时候, 前台ERP程序的性能就会高许多。而有时候,可能需要按供应商来统计当天的进货金额,此时,最好能够 在进货明细表中,给供应商字段添加索引,这对于提高当天进货汇总表作业的运行效率,会有非常大的帮 助。总之,在分组查询或者排序查询的表上,设置索引对于提高应用程序的整体性能,具有不可忽视的作 用。

三是如果待排序的列有多个,则需要在这些列上建立复合索引。如前台应用程序在生成当天的进货明 细表时,需要按供应商、采购订单号、产品编号进行排序。此时,也就是说,在生成进货明细表这份报表 时,要按这三个字段进行排序。遇到这种情况时,对这些字段建立复合索引,提高查询效率,是一个不错 的选择。

以上这些SQL语句优化,Oracle数据库与SQL Server数据库都可以实现。虽然具体的实现语句可能稍有 区别,但都是换汤不换药,没有本质区别。

2、 把索引与数据文件存放在不同的磁盘中。

当索引或者数据库文件比较庞大时,把他们放在同一个磁盘中会加大输入输出等竞争,从而抵消了索 引的作用。为了解决过多的索引导致输入输出效率降低的问题,在数据库设计的时候,最好把索引跟用户 的表空间建立在不同的磁盘中。如把数据库的表空间建立在一块硬盘中,而把索引建立在另外一块硬盘中 。如此的话,就可以明显地降低输入输出竞争。也就是说,这样设计,随着索引的增加,不会导致输入输 出效率的低下。

不过,根据笔者的了解,索引与数据文件存放在不同的磁盘中,现在好像只有Oracle 数据库可以做到 ,而微软的SQL Server数据库则无法实现这一点。

这也许根他们的定位不同。甲骨文的数据库系统是针对大型的数据库应用而设计,所以,对于查询的 效率要求更加高。

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读