- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL Server 查询优化技术研究与实现
SQL Server 查询优化技术研究与实现
【摘 要】随着数据量的激增,数据库的查询优化越来越重要,本文研究了适合大容量数据的数据库查询优化方案,提出了SQL语句中有效的查询优化方法,有效提高查询效率以及数据库的整体性能。
【关键词】SQL Server;查询优化;方法
数据库系统是管理信息系统的核心,是最为重要的计算机应用之一。从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。举例来说,如果数据信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。
1 查询优化的必要性
关系系统的查询优化既是RDBMS实现的关键技术又是关系系统的优点所在。它减轻了用户选择存取路径的负担。用户只要提出“干什么”,不必指出“怎么干”。查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好。所以查询优化在查询处理阶段对于选择执行查询的最有效策略起着至关重要的作用。当提交一条SQL语句时,DBMS 进行语法检查后,将语句提交给查询优化器,优化器再将SQL语句按照一定的优化方法分析为各个组成。SQL Server的查询优化器是一个基于成本的优化器。它为一个给定的查询分析出很多的候选的查询计划,并且估算每个候选计划的成本,从而选择一个成本最低的计划进行执行。实际上,因为查询优化器不可能对每一个产生的候选计划进行优化,所以查询优化器会在优化时间和查询计划的质量之间进行一个平衡,尽可能的选择一个“最优”的计划。用户提交的SQL语句是系统优化的基础,一个不合理的查询计划仅通过查询优化器进行优化,不可能高效,因此SQL语句书写的优劣至关重要。
2 查询优化的策略
2.1 统一SQL语句的写法
由于SQL不区分大小写,对于上面两句SQL语句,虽然程序员认为是相同的,但查询分析器就认为是两句不同的SQL语句,必须进行两次解析,生成2个执行计划。对于程序设计人员应该遵循同样的书写格式。
2.2 合理使用索引
索引是数据库中一个常用而重要的数据库对象,而优化查询重要的方法是建立索引,在关系数据库系统的表上建立合适的索引,可以避免表扫描并减少因查询而造成的I/O开销,提高数据库数据查询的速度,改善数据库性能。但是创建索引会增加系统的时间和空间的开销。因此创建索引时必须要与实现应用系统的查询需求密切结合,才能达到优化查询的目的。
在SQL Server中有聚集索引和非聚集索引,其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大。在表中选择创建聚集索引时要特别注意,如果聚集索引没有建在表的顺序字段上,该表容易发生页分裂,导致查询操作效率低。
以订单表为例,有订单编号orderid,也有客户编号customerid,聚集索引应该建立在哪个字段上呢?对于该表,订单编号是顺序添加的,如果在orderid上加聚集索引,新增的行都是添加在末尾,这样不容易经常产生页分裂。然而,由于大多数查询都是根据客户编号来查的,因此,将聚集索引加在customerid上才有意义。而customerid对于订单表而言,并非顺序字段。
SQL Server的聚集索引实际上是对表按照聚集索引字段的顺序进行了排序。SQL Server的聚集索引就是表本身的一种组织形式,所以它的效率是非常高的。也正因为此,插入一条记录,它的位置不是随便放的,而是要按照顺序放在该放的数据页,如果那个数据页没有空间了,就引起了页分裂。所以很显然,聚集索引没有建在表的顺序字段上,该表容易发生页分裂,导致执行效率低。
客户“王盼盼”的“customerid”是001,那么“王盼盼”的订单信息必须都放在这张表的第一个数据页上,如果今天“王盼盼”新下了一个订单,那该订单信息不能放在表的最后一页,而是第一页!如果第一页放满了呢?则该表所有数据都要往后移动为这条记录腾地方,会导致更新操作效率大幅下降。对于聚集索引没有建在顺序字段上的表且大量进行数据更新操作的表,建议给与较低的页填充因子。
2.3 模糊查询慎用%
SQL Server中提供了两个模糊查询关键字%和_,其中%表示包含零个或任意多字符串,_表示任何单个字符。
关键词%josn%,由于josn前面用到了“%”,因此该查询必然扫描全表,执行效率低。除非必要,否则不要在关键词前加%。
2.4 连接查询优化
SQL Server提供三种连接方式Merge Join、N
文档评论(0)