网站大量收购独家精品文档,联系QQ:2885784924

MS SQL Server数据库查询优化技巧探究.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MS SQL Server数据库查询优化技巧探究

MS SQL Server数据库查询优化技巧探究【摘 要】本文主要是对MS SQL Server数据库查询优化技巧进行了说明和分析,对索引使用、查询条件以及数据表的设计等进行了阐述。 【关键词】数据库;查询;优化技巧 一、建立索引能够提高查询效率 在应用数据库的过程当中是否应用索引查询是一个具有争议性的话题,这主要是因为对数据库某列添加索引以后,在利用该索引对整个数据库进行查询的时候就只会在索引范围之内进行扫描,而不利用该索引对整个数据库进行查询时所进行的就是全表的扫描。在这样一种状况下,从性能的角度来看的话,目标表记录的总数是固定的,因此在查询结果比较少的时候索引查询的效率才会相对比较高,查询结果较多的时候索引查询的效率反而会比较低,正是因为这样,索引查询的应用与否才会成为一个具有争议性的问题。但在实际的应用过程当中,各种不同软件的应用目的不一,通常来说,记录数较少的表查询结果与记录数的比值偏大,甚至能够出现100%查询,但记录数少的表查询结果与记录数的比值则偏小,由此认为,至少应当对一些记录数比较多的数据库建立索引查询来实现查询效率的提高。 二、数据表设计对查询性能的影响分析 (1)空值比较。在对数据表进行定义的过程当中会涉及到数据列的空值问题,这主要是因为在实际的应用过程当中无疑会出现允许空值的状况,但在定义数据表时如果允许空值设置的话就会出现is null的查询条件。一旦is null查询条件出现后续的查询过程就是对全表进行的扫描而不是索引扫描,具体来说,int当中采用一些特殊的数字来作为默认值,而字符串当中则采用空串来作为默认值。(2)字符类型比较。MS SQL Server2005当中共有六类字符串数据类型,包括:varbinary、binary、nvarchar、nchar、varchar、char。在这六个字符串数据类型当中,binary、nchar、char是固定长度的字符串,varbinary、nvarchar、varchar则是可变长度的字符串,在应用的过程当中不同类型也是可以互换使用的,因此要注意对其进行区分。 三、条件表达式性能优缺点分析 在进行数据查询的过程当中,查询结果在查询语句中的表达方式有多种,且不同表达方式所得到的查询效率有高有底,这也就是说,在进行条件表达式的编写时也需要根据查询结果的特点进行选择和应用,下面主要是结合常用的几种情况进行说明和分析。(1)!=或<>情况。我们在实际的查询过程当中应当尽可能的去避免不等条件的应用,这主要是因为一旦在查询过程当中使用不等条件就意味着后续查询过程只能够通过全面扫描来完成,索引扫描在其中是难以发挥作用的。通常情况下采用的是大于或小于的表达式来对不等条件进行表示。(2)Like情况。Like情况主要是应用于字符串的模糊查询,其具体的查询表达形式同样有多种:like a%、like%a和like a%a ,在这其中,只有likea%既能应用于索引扫描又能应用于全表扫描,like%a和likea%a只能进行全表扫描,正是因为这样,我们在进行选择和使用的时候就尽可能的避免后两种表达方式。但是,在一些目标列中字段过长的时候,检索方式会选择为全文检索,在这样一种情况下则还是选择like%a和likea%a更为合适。(3)in、not in 情况。在进行查询语言的设计时,in的用法包括两种,一种是后接条件集合,一种是后接子查询,下文中将对这样两种情况分别进行说明和分析。in后接条件集合,如果其数据量不大或者其对应条件无索引时,可以直接予以使用而不需要对其进行优化,相反,如果数据量较大或者其对应条件有索引时,就建议将所有的条件都集合起来,并为每一个条件都单独写sql语句,采用union或者是union all将所有的查询结果进行连接。在这里进一步说明union和union all之间的区别,union能够对查询结果进行有效的排序,并去除重复项,而union all则无此功能,在实际的应用过程当中就可以根据需要排序与否来进行选择和使用。In后接子查询时,目标表记录数量如果明显比子查询表记录数少的话就需要采用exists来代替in,必要的时候还可以在子查询当中建立索引。但需要注意的是,在一些能够直接使用连接查询方式的语句当中就尽可能的不要使用in,这主要是因为in语句相当于hash连接,其性能相对而言要低的多。Not in在任何状况下应用都不会使用索引,因此认为在一些数据量大的数据库当中尽量不要使用,而not exists的子查询则是可以应用索引扫描的,因此有必要的时候就可以直接采用not exists加索引来对其进行优化。 通过上文的说明和分析就可以看到,在进行数据库查询时往往是没有既定的方式和规则的,需要我们以查询效率为目的来进行

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档