【摘 要】本文主要是对MS SQL Server数据库查询优化技巧进行了说明和分析,对索引使用、查询条件以及数据表的设计等进行了阐述。
中国论文网 http://www.xzbu.com/2/view-3479336.htm
  【关键词】数据库;查询;优化技巧
  一、建立索引能够提高查询效率
  在应用数据库的过程当中是否应用索引查询是一个具有争议性的话题,这主要是因为对数据库某列添加索引以后,在利用该索引对整个数据库进行查询的时候就只会在索引范围之内进行扫描,而不利用该索引对整个数据库进行查询时所进行的就是全表的扫描。在这样一种状况下,从性能的角度来看的话,目标表记录的总数是固定的,因此在查询结果比较少的时候索引查询的效率才会相对比较高,查询结果较多的时候索引查询的效率反而会比较低,正是因为这样,索引查询的应用与否才会成为一个具有争议性的问题。但在实际的应用过程当中,各种不同软件的应用目的不一,通常来说,记录数较少的表查询结果与记录数的比值偏大,甚至能够出现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加索引来对其进行优化。
  通过上文的说明和分析就可以看到,在进行数据库查询时往往是没有既定的方式和规则的,需要我们以查询效率为目的来进行创新、设计和尝试。
  参 考 文 献
  [1]王珊,萨师炫.数据库系统概述(第四版)[M].北京:高等教育出版社,2006
  [2]李辉,王至邀.一种多条件分页查询优化方法的设计[J].计算机工程.2010(2)

MS SQL Server数据库查询优化技巧的更多相关文章

  1. 在易语言中调用MS SQL SERVER数据库存储过程方法总结

    Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...

  2. (火炬)MS SQL Server数据库案例教程

    (火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...

  3. MS SQL Server数据库修复/MDF数据文件数据恢复/MDF质疑/mdf无法附加

    微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MD ...

  4. MS SQL Server数据库在线管理工具

    MS SQL Server数据库以其优异的性能,被广泛使用,特别是政务,医疗行业.但是远程维护挺不方便的,目前有一款基于WEB的工具TreeSoft数据库管理系统. 免安装,直接解压就可以用了.直接通 ...

  5. MS SQL Server 数据库分离-SQL语句

    前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...

  6. SQL Server 数据库编程技巧

    Ø  简介 本文主要介绍 SQL Server 数据库在平常的开发中,可能会涉及到的编程技巧,主要包含以下内容: 1.   解决 SQL Server 不支持 127.0.0.1 登录 2.   查询 ...

  7. MS Sql Server 数据库或表修复(DBCC CHECKDB)

    MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令.  1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL ...

  8. MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)

    ----------------- [1] use master go sp_configure reconfigure with override go ----------------- [2] ...

  9. MS SQL SERVER 数据库日志压缩方法与代码

    MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大.一般都是数据库日志引起的!数据库日志的增长可以达到好几百M. DUMP TRANSACTION [数据库名] ...

随机推荐

  1. 多线程学习:Volatile与Synchronized的区别、什么是重排序

    java线程的内存模型 java的线程内存模型中定义了每个线程都有一份自己的共享变量副本(本地内存),里面存放自己私有的数据,其他线程不能直接访问,而一些共享变量则存在主内存中,供所有线程访问. 上图 ...

  2. 【CODECHEF】Children Trips 倍增

    此题绝了,$O(n^{1.5}\ log\ n)$都可以过掉.... 题目大意:给你一颗$n$个点的树,每条边边权不是2就是$1$,有$m$个询问,每次询问一个人从$x$点走到$y$点,每天可以走的里 ...

  3. scalac:cannot connnect to compile server(idea 编译scala)

    idea编译scala报错 解决办法: File->setting->scala compile server  (找到jdk填上 ok)

  4. IDEA里点击Build,再Build Artifacts没反应,灰色的?解决办法(图文详解)

    不多说,直接上干货! 问题详情 如下:点击Build ,再 Build -> Build Artifacts,没反应??? 解决办法 1.File,再Project Structure 2.然后 ...

  5. centos7设置SSH安全策略–指定IP登陆

    之前自己搭建了个博客网站(理想三旬),写了些文章,但是由于一些原因慢慢将文章放在博客园了.所以这里将一些文章复制过来.便于以后自己查询. 为了服务器的安全性,我们在日常使用需要授予权限和指定ip登陆来 ...

  6. 阿里云使用镜像安装freepbx

    安装freepbx真的是历经坎坷,不过也收获了一些东西.freepbx可以通过源码安装也可以通过镜像安装.源码安装我们会在另外一篇文章中讲到,这里我们讲到的是镜像安装,在本地进行镜像安装还是比较简单的 ...

  7. Windows 8.1 硬盘安装 Ubuntu14.04 双系统参考教程及注意事项

    硬盘安装,无需光盘.U盘:Win8.1为主,Ubuntu14.04为辅,可将Windows或Ubuntu设置为开机默认启动项:在Ubuntu下可查看.操作Windows系统下的文件:适用于安装和14. ...

  8. jQuery操纵cookie(原生javascript处理cookie)

    jQuery也是可以操作cookie的 1.首先下载jQuery.js 以及 jquery.cookie.js 这两个文件 2.安装(其实就是引用) <html>       <he ...

  9. clientX/Y pageX/Y offsetX/Y layerX/Y screenX/Y clientHeight innerWidth...

    关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种 event.clientX/Y event.pageX/Y event.offsetX/Y event.layerX/Y event.sc ...

  10. Linux man C++ 库函数

    默认情况下,linux是的man是不能查阅C++的标准库函数的,这个很不方便,那有没有办法可以直接man C++标准库函数呢? 当然有,不过要自己动手,自己动手,才能丰衣足食! 1. 下载安装manp ...