首页 / 知识
关于sql server:优化性能不佳的查询应采取哪些步骤?
2023-04-15 05:56:00

What steps should be necessary to optimize a poorly performing query?我知道这是一个广泛的问题,但是我继承了几个性能不佳的产品,因此需要对它们进行优化。 我想知道最优化的步骤是什么。 那么,你们中的一些人在遇到相同情况时会采取什么步骤?
在SQL Server中,您可以在Query Analyzer或Management Studio中查看查询计划。这将告诉您在每批语句中花费的时间的大致百分比。您将需要查找以下内容:
其他一些一般性提示:
最后,我强烈建议创建一组负载测试(使用Visual Studio 2008测试版),您可以使用它们来模拟应用程序在处理大量请求时的行为。某些SQL性能瓶颈仅在这种情况下才会显现出来,并且能够重现这些瓶颈使其更容易修复。 索引可能是一个很好的起点... 可以通过SQL Server索引调整向导来消除低挂的果实。 您可以考虑以下几项来优化查询性能。 确保您只拥有最少的数据。确保仅选择所需的列。将字段大小减小到最小。 考虑对数据库进行非规范化以减少联接 避免循环(即获取游标),坚持设置操作。 将查询实现为存储过程,因为它是预编译的,执行起来会更快。 确保您设置了正确的索引。如果您的数据库主要用于搜索,请考虑使用更多索引。 使用执行计划查看处理如何完成。您要避免的是表格扫描,因为这样做成本很高。 确保自动统计设置为开。 SQL需要此来帮助确定最佳执行。有关更多信息,请参见Mike Gunderloy的精彩文章。 SQL Server 2005中的统计基础 确保索引没有碎片减少SQL Server索引碎片 确保您的表没有碎片。如何在SQL Server 2000和2005中检测表碎片 我不确定其他数据库,但是对于SQL Server,我建议执行计划。它非常清楚地显示了(尽管有很多垂直和水平滚动,除非您有400英寸的监视器!)显示了查询的哪些步骤正在浪费时间。 如果您迈出了疯狂的80%的第一步,那么也许可以添加一个索引,然后在对索引进行调整之后,重新运行执行计划以查找下一个最大的步骤。 经过几次调整后,您可能会发现确实没有其他步骤能与众不同,也就是说,每个步骤都只有1-2%。如果是这样,那么您可能需要查看是否有一种方法可以减少查询中包含的数据量,是否需要将这四百万个已关闭的销售订单包含在"有效销售订单"查询中? ?不,所以排除所有STATUS ='C'...或类似的东西。 从执行计划中可以看到的另一个改进是书签查找,基本上它可以在索引中找到一个匹配项,但是SQL Server必须快速遍历表才能找到所需的记录。有时此操作可能比仅扫描表所花的时间要长,如果是这种情况,您真的需要该索引吗? 使用索引,尤其是使用SQL Server 2005时,您应该查看INCLUDE子句,这基本上使您可以在索引中包含一列,而不必真正包含在索引中,因此,如果查询所需的所有数据都在索引或是包含的columnn,则SQL Server甚至不必查看表,这是一个很大的性能提升。 执行计划是一个很好的开始,它将帮助您弄清楚您需要解决查询的哪一部分。 一旦确定了位置,就该解决方法和原因了。看一下您要执行的查询的类型。不惜一切代价避免循环,因为它们很慢。不惜一切代价避免游标,因为它们很慢。尽可能坚持设置基于查询的查询。 如果您正在使用联接,则可以通过一些方法为sql提示要使用的联接类型。不过请注意,虽然一个提示可能会使您的查询加快一次,但根据数据和参数的不同,下一次查询的速度可能会降低10倍。 最后,确保您的数据库索引正确。一个很好的起点是where子句中包含的任何字段都应该在其上具有索引。 查看进行查询的表上的索引。参与where子句的特定字段可能需要索引。还要查看查询中的联接中使用的字段(如果存在联接)。如果索引已经存在,请查看索引的类型。 失败(因为使用锁定提示会带来负面影响)查看锁定提示并显式命名要在联接中使用的索引。如果您遇到很多死锁的事务,那么使用NOLOCKS更为明显。 做罗马和安迪·S首先提到的。 |
最新内容
相关内容
linux查询ip命令?
linux查询ip命令?,地址,网络,信息,设备,系统,电脑,终端,命令,中心,技术指标,linux查询ip地址命令1、输入以下命令:ipaddrshow。每个设备的IP地linux日志命令查询?
linux日志命令查询?,系统,名称,信息,实时,电脑,对比,最新,日志,命令,环境,Linux系统日志怎么查看1、less /var/log/syslog 该命令会打开 /var/linux文本查询命令?
linux文本查询命令?,标准,命令,文件,工具,数据,信息,位置,系统,内容,文本,Linux下Grep命令的详细使用方法?1、查找root目录下包含Linux的文件,查询linux的命令历史?
查询linux的命令历史?,信息,系统,名称,地址,服务,命令,数据,环境,指令,用户,请问linux的history指令如何显示全部的历史记录在Linux服务器上,可linux命令左右查询?
linux命令左右查询?,系统,信息,管理,地址,工作,命令,文件,单位,位置,数据,linux查看路径命令1、linux命令如果记不得,可以使用man命令来查看某linux线程查询命令?
linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Linux系统如何查看进程的线程数1、第一种方法:top命令法首先执行toplinux命令左右查询?
linux命令左右查询?,系统,信息,管理,地址,工作,命令,文件,单位,位置,数据,linux查看路径命令1、linux命令如果记不得,可以使用man命令来查看某linux简单查询命令?
linux简单查询命令?,地址,命令,信息,设备,电脑,系统,工作,文件,终端,内容,Linux下查看文件命令选择1、查看文件的命令,主要就是用 cat命令, cat+查询linux配置的命令?
查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,在linux下如何通过命令查网卡配置1、linux查看系统网卡信息的命令查询linux配置的命令?
查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,在linux下如何通过命令查网卡配置1、linux查看系统网卡信息的命令linux命令查询时间?
linux命令查询时间?,时间,系统,状态,信息,数据,标准,地址,平台,环境,命令,在windws下模拟Linux下可获取命令执行时间的time命令time命令可以查linux查询翻页命令?
linux查询翻页命令?,工作,地址,系统,信息,命令,工具,目录,管理,暂停,标准,Linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目