文章关键字:|优化|SQL Server|数据库|查询|速度|I/O|缺陷|服务器|CPU|竞争|资源|
查询速度慢的原因很多,常见如下几种:
没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)。
I/O吞吐量小,形成了瓶颈效应。
没有创建计算列导致查询不优化。
内存不足。
网络速度慢。
查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。
锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)。
sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
返回了不必要的行和列。
查询语句不好,没有优化。
可以通过如下方法来优化查询 :
1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要。
2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)。
3、升级硬件。
4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段。
5、提高网速。
6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server? 2000 时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的 1.5 倍。如果另外安装了全文检索功能,并打算运行 Microsoft 搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍。将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半)。
7、增加服务器 CPU个数;但是必须明白并行处理串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成多个任务,就可以在处理器上运行。例如耽搁查询的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作Update,Insert, Delete还不能并行处理。
8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。 like 'a%' 使用索引 like '%a' 不使用索引用 like '%a%' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。
9、DB Server 和APPLication Server 分离;OLTP和OLAP分离。
10、分布式分区视图可用于实现数据库服务器联合体。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层 Web 站点的处理需要。有关更多信息,参见设计联合数据库服务器。(参照SQL帮助文件'分区视图')
在实现分区视图之前,必须先水平分区表。
在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。
11、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收缩数据和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。在T-sql的写法上有很大的讲究,下面列出常见的要点:首先,DBMS处理查询计划的过程是这样的:
查询语句的词法、语法检查。
将语句提交给DBMS的查询优化器。
优化器做代数优化和存取路径的优化。
由预编译模块生成查询规划。
然后在合适的时间提交给系统处理执行。
最后将执行结果返回给用户其次,看一下SQL SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。
12、Commit和rollback的区别 Rollback:回滚所有的事物。 Commit:提交当前的事物. 没有必要在动态SQL里写事物,如果要写请写在外面如: begin tran exec(@s) commit trans 或者将动态SQL 写成函数或者存储过程。
未完,原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9201
分享到:
相关推荐
50种方法巧妙优化SQL Server数据库 50种方法巧妙优化SQL Server数据库
50种方法巧妙优化你的SQLServer数据库50种方法巧妙优化你的SQLServer数据库50种方法巧妙优化你的SQLServer数据库50种方法巧妙优化你的SQLServer数据库50种方法巧妙优化你的SQLServer数据库
详细讲述如何优化SQL SERVER数据库的50种方法
50种方法巧妙优化你的SQLServer数据库.doc
50种方法巧妙优化你的SQL-Server数据库.doc
巧妙运用WinCC V6.0 VBS 脚本实现对 SQL Server数据库的存储与查寻
巧妙应用SQL Server触发器.pdf
针对SQLServer 2005数据库应用系统的实际应用,从索引、SOL语句优化和存储过程等方面,分析了影响SQL Server 2005查询效率的因素.通过恰当使用索引、合理优化SQL语句、巧妙使用存储过程,可以提高检索速度、改善...
根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对...
举例,常规思维下对CustomerStatus的Enum设置如下: 代码如下: [Serializable] public enum CustomerStatus { New = 0, Active = 1, Overdue = 2, Suspended = 3, Closing = 4, Closed = 5 } 在数据库中以int形式...
2、用SQLserver数据库时的产品安装指南 自动安装: 源码版安装之前,请使用Vs2015或以上版本以管理与身份打开项目, 您需要重新生成解决方案(管理员身份打开项目),安装版不需要重新生成解决方案 1.登录您的...
实例226 对SQLServer数据库进行录入和提取多媒体文件 实例227 对SQL Server数据库进行录入和存储Word文档 8.10 数据备份恢复 实例228 Access数据库备份与还原 实例229 SQL Server数据库备份与恢复 实例230 ...
实例226 对SQLServer数据库进行录入和提取多媒体文件 实例227 对SQL Server数据库进行录入和存储Word文档 8.10 数据备份恢复 实例228 Access数据库备份与还原 实例229 SQL Server数据库备份与恢复 实例230 ...
实例269 从SQL Server数据库中提取多媒体文件 347 实例270 向SQL Server中存储Word文档 348 实例271 从SQL Server中提取Word文档 349 8.4 SQL Server服务器应用 350 实例272 和服务器时间同步 350 实例273...
轻开平台同时支持使用多个数据源和不同厂商提供的数据库服务器,只要支持JDBC访问及基于SQL规范的数据库(如:MySQL、SQLServer、Oracle、DB2、Teradata、SyBase等关系型数据库及基于SQL的大数据分析系统Vertica)。...