MS SQL Server数据库查询优化技巧
【摘 要】本文主要是对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数据库查询优化技巧的更多相关文章
- 在易语言中调用MS SQL SERVER数据库存储过程方法总结
Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...
- (火炬)MS SQL Server数据库案例教程
(火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...
- MS SQL Server数据库修复/MDF数据文件数据恢复/MDF质疑/mdf无法附加
微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MD ...
- MS SQL Server数据库在线管理工具
MS SQL Server数据库以其优异的性能,被广泛使用,特别是政务,医疗行业.但是远程维护挺不方便的,目前有一款基于WEB的工具TreeSoft数据库管理系统. 免安装,直接解压就可以用了.直接通 ...
- MS SQL Server 数据库分离-SQL语句
前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...
- SQL Server 数据库编程技巧
Ø 简介 本文主要介绍 SQL Server 数据库在平常的开发中,可能会涉及到的编程技巧,主要包含以下内容: 1. 解决 SQL Server 不支持 127.0.0.1 登录 2. 查询 ...
- MS Sql Server 数据库或表修复(DBCC CHECKDB)
MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令. 1. DBCC CHECKDB 重启服务器后,在没有进行任何操作的情况下,在SQL ...
- MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
----------------- [1] use master go sp_configure reconfigure with override go ----------------- [2] ...
- MS SQL SERVER 数据库日志压缩方法与代码
MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大.一般都是数据库日志引起的!数据库日志的增长可以达到好几百M. DUMP TRANSACTION [数据库名] ...
随机推荐
- Python shutil模块(目录和文件操作)
import shutil #导入shutil模块 copyfileobj方法 将类文件对象fsrc的内容复制到类文件对象fdst shutil.copyfileobj(fsrc, fdst[, le ...
- openerp QWeb
1.web 模块 注意,OpenERP 模块中 web 部分用到的所有文件必须被放置在模块内的 static 文件夹里.这是强制性的,出于安全考虑. 事实上,我们创建的文件夹 CSS,JS 和 XML ...
- 【转】Spark源码分析之-deploy模块
原文地址:http://jerryshao.me/architecture/2013/04/30/Spark%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8B- ...
- js便签笔记(4)——简单说说getAttributeNode()和setAttributeNode()
1.前言: 前两天写过一片<分析dom元素的特性Attribute和属性Property>,分析了特性和属性的区别.那篇文章却忽略了一个主要知识点——getAttributeNode()和 ...
- HTML自己整理
1.margin:0 auto 表示什么意思?? margin后面如果只有两个参数的话,第一个表示top和bottom,第二个表示left和right因为0 auto,表示上下边界为0,左右则根据宽度 ...
- 既之前的基础,先写个简单的PHP 与数据库 的数据交流
程序分三个板块, 现在先不用 css 和 javascript 先用纯 html php 写吧. 所以那些 嵌入式 <font size=.... 什么的看看就算了,不推荐如此使 ...
- 《JavaScript权威指南(第6版)(中文版)》PDF
简介自1996年以来,JavaScript的:权威指南已为JavaScript圣经程序员,程序员指南和全面的参考,以核心语言和客户端JavaScript API的Web浏览器定义.第6版包括HTML5 ...
- 远程桌面控制项目开发(Spring+Netty+Swing)
[目录] 1.前言 2.初现端倪 3.款款深入 4.责任细分 5.功能层级图 6.项目结构 7.关键类设计 8.一些设计想法 9.待优化 10.一点心得 11.效果演示 12.讨论 13.GitHub ...
- POJ 1062 昂贵的聘礼(枚举限制条件——Dijkstra算法)
题目: 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说:& ...
- 匿名函数、闭包、lambda表达式、Block
C#有lambda.匿名函数,js有匿名函数.闭包,OC中有block,看到这是不是心中有一万个草泥马在跑,不过它们这些都是换汤不换药,不同语言名字不一样. 从功能性上说lambda和closure( ...