`
gaofen100
  • 浏览: 1243193 次
文章分类
社区版块
存档分类
最新评论

SQL Server数据库查询速度慢的原因和解决方法

 
阅读更多

SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:

  1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)

  2、I/O吞吐量小,形成了瓶颈效应。

  3、没有创建计算列导致查询不优化。

  4、内存不足

  5、网络速度慢

  6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)

  7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)

  8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。

  9、返回了不必要的行和列

  10、查询语句不好,没有优化

  ●可以通过以下方法来优化查询:

  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 站点的处理需要。有关更多信息,参见设计联合数据库服务器。

  a、在实现分区视图之前,必须先水平分区表

  b、在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。

  11、重建索引 DBCC REINDEX ,DBCCINDEXDEFRAG,收缩数据和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。

  在T-sql的写法上有很大的讲究,下面列出常见的要点:首先,DBMS处理查询计划的过程是这样的:

  1、查询语句的词法、语法检查

  2、将语句提交给DBMS的查询优化器

  3、优化器做代数优化和存取路径的优化

  4、由预编译模块生成查询规划

  5、然后在合适的时间提交给系统处理执行

  6、最后将执行结果返回给用户。

  其次,看一下SQL SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。

  12、Commit和rollback的区别Rollback:回滚所有的事物。Commit:提交当前的事物,没有必要在动态SQL里写事物,如果要写请写在外面如:begin tran exec(@s) commit trans或者将动态SQL 写成函数或者存储过程。

  13、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。

  14、SQL的注释申明对执行没有任何影响

  15、尽可能不使用光标,它占用大量的资源。如果需要row-by-row地执行,尽量采用非光标技术,如:在客户端循环,用临时表,Table变量,用子查询,用Case语句等等。

  游标可以按照它所支持的提取选项进行分类:只进必须按照从第一行到最后一行的顺序提取行。FETCH NEXT 是唯一允许的提取操作,也是默认方式。可滚动性可以在游标中任何地方随机提取任意行。游标的技术在SQL2000下变得功能很强大,他的目的是支持循环。

  有四个并发选项READ_ONLY:不允许通过游标定位更新(Update),且在组成结果集的行中没有锁。

  OPTIMISTIC WITH valueS:乐观并发控制是事务控制理论的一个标准部分。乐观并发控制用于这样的情形,即在打开游标及更新行的间隔中,只有很小的机会让第二个用户更新某一行。当某个游标以此选项打开时,没有锁控制其中的行,这将有助于最大化其处理能力。如果用户试图修改某一行,则此行的当前值会与最后一次提取此行时获取的值进行比较。如果任何值发生改变,则服务器就会知道其他人已更新了此行,并会返回一个错误。如果值是一样的,服务器就执行修改。

分享到:
评论

相关推荐

    SQL Server数据库查询速度慢原因及优化方法

    【赛迪网-IT技术报道】SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:  1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)  2、I/O吞吐量小,形成了瓶颈效应。  3、没有...

    Sql Server数据库超时问题的解决方法

    Sql Server数据库超时问题的解决方法 在Sql Server数据库中,超时问题是一个常见的错误,可能会导致数据库的性能下降,影响应用程序的稳定运行。该问题的解决方法可以从多方面入手,包括数据库设计、连接设置、查询...

    SQL Server数据库sql 语句优化

    sql 语句优化 SQL Server数据库查询速度慢的原因有很多

    解析IP地址连接SQL数据库速度慢的原因

    本文分析了使用IP地址连接SQL Server数据库的速度慢的原因,介绍了获取最新的Microsoft SQL Server 2000 Service Pack、最新的Microsoft Data Access Components 2.6 Service Pack来解决此问题。

    SQL Server数据库“置疑”的原因及解决方法.pdf

    本文将介绍SQL Server数据库“置疑”的几种常见原因以及相应的解决方法,这些方法经过实践验证,具有简便可操作、安全可靠的特点,能够帮助恢复数据库正常工作。 1. 事务日志问题 事务日志是SQL Server数据库中非常...

    Sqlserver大数据量插入速度慢或丢失数据的解决方法

    ### Sqlserver大数据量插入速度慢或丢失数据的解决方法 #### 概述 在处理大量数据插入SQL Server数据库的过程中,可能会遇到插入速度慢或者数据丢失的问题。这种情况通常出现在需要批量插入数千甚至上万条记录的...

    SQLServer数据库备份再还原之后登录名丢失解决方法

    ### SQL Server 数据库备份后登录名丢失问题及解决方法 #### 背景与问题概述 在进行SQL Server数据库的备份与恢复操作时,经常会出现一个棘手的问题:原本数据库中的登录名在恢复到另一台服务器后消失不见,导致...

    SQL数据库可疑处理

    本文将详细介绍解决 SQL Server 数据库可疑的步骤和解决方案。 SQL Server 数据库可疑的原因 SQL Server 数据库可疑可能是由于多种原因引起的,例如磁盘空间不足、数据库文件损坏、日志文件损坏、数据库配置错误等...

    SQL查询慢原因分析

    ### SQL查询慢原因分析 #### 一、索引缺失或未使用 索引是数据库中用于加速数据检索的重要工具。当SQL查询没有使用适当的索引时,数据库管理系统(DBMS)可能需要全表扫描(Table Scan),即遍历整个表中的每一行...

    SQL SERVER数据库附加失败解决办法

    在处理SQL SERVER数据库附加过程中,遇到失败的情况是很常见的问题,这些失败可能是由于多种原因导致的,解决这些问题的方法也各不相同。本文将详细列出解决SQL SERVER数据库附加失败的几种方法,并对每个解决方案...

    sqlserver数据库优化50法

    以上便是SQLServer数据库优化的五十种方法,通过这些措施,可以显著改善数据库性能,解决查询速度慢的问题,提升整体系统效率。在实际应用中,应根据具体情况进行调整,结合监控工具跟踪数据库性能,确保优化措施的...

    SQL Server 数据库连接包

    总结来说,SQL Server 数据库连接包是一个全面的工具集,使Java开发者能高效、安全地与SQL Server数据库进行交互,涵盖了从基本的连接创建到复杂的事务管理和性能优化等多个方面。通过正确使用和配置这些资源,可以...

    SQL Server死锁产生的原因及解决办法

    理解死锁的原因和解决策略对于优化数据库性能至关重要。 首先,我们要深入理解死锁的基本原理。死锁的根本原因是资源竞争。在SQL Server中,当两个或更多事务按不同顺序请求并持有资源时,就可能发生死锁。举个例子...

    SQL Server数据库状态监控 – 错误日志

    在SQL Server数据库管理中,错误日志扮演着至关重要的角色,它是系统监控和故障排查的重要工具。错误日志记录了数据库服务器在运行过程中遇到的问题、警告以及重要事件,帮助管理员了解系统的健康状况,并在出现问题...

    解决SQLServer数据库质疑

    本篇文章将详细解析如何解决SQL Server数据库出现错误9003(LSN无效)的问题,并提供一种经过多次测试确认可行的恢复方法。 首先,我们需要理解错误9003的含义。LSN(Log Sequence Number)是SQL Server用于跟踪...

    SQL Server数据库自动备份工具

    这款工具简化了数据库备份的过程,使得即便是非专业人员也能轻松地对SQL Server数据库进行定期备份,确保数据的安全性和完整性。在机房管理中,数据备份是至关重要的环节,因为任何意外的数据丢失都可能导致严重后果...

    向sql server数据库插入中文时显示乱码

    在开发过程中,尤其是在使用ASP.NET与SQL...通过上述步骤,我们可以有效地解决在ASP.NET 2.0应用程序中向SQL Server 2005数据库插入中文时出现乱码的问题。需要注意的是,在实际应用中,还需根据具体情况灵活调整配置。

    从新加载sql server数据库

    本文将基于给定的信息——“从新加载SQL Server数据库”的标题、“从新加载SQL Server数据库”的描述以及“从新加载sql server数据库”的标签,来详细阐述如何执行这一操作,并解释给出的部分内容:“regsvr32 msxml...

    sql server数据库日志满的处理方法

    在IT领域,尤其是在数据库管理与维护中,SQL Server数据库日志满的问题是常见的技术挑战之一。...通过以上方法的综合运用,可以有效解决SQL Server数据库日志满的问题,保障数据库系统的稳定运行和高效性能。

    优化SQL Server数据库查询方法.rar

    综上所述,优化SQL Server数据库查询方法需要综合考虑数据结构、查询语句、索引策略、资源管理、配置调整、硬件升级、查询执行计划分析等多个方面,通过持续监控和调整,确保系统的高效运行。"优化SQL Server数据库...

Global site tag (gtag.js) - Google Analytics