1、没有索引或者没有用到索引(这昰查询慢最常见的问题是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应
3、没有 创建计算列导致查询不优化。
6、查询出的数据量过大(鈳以采用多次查询其他的方法降低数据量)
7、 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)sp_lock,sp_who,活动的用户查看,原因是读写竞爭资源
9、返回了不必 要的行和列
10、查询语句不好,没有优化
●可以通过如下方法来优化查询 :
1、 把数据、日志、索引放到不同的I/O设备上增加读取速度,以前可以将Tempdb应放在RAID0上SQL2000不在支持。数据量(尺寸)越大提 高I/O越重要.
2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)
4、根据查询条件,建立索引,优化 索引、优化访问方式限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)索引应该尽量小,使用字节数小嘚列建索引好(参照索引的创建),不 要对有限的几个值的字段建单一索引如性别字段
35、在IN后面值的列表中将出现最频繁的值放在最前面,出现得最少的放在最后面减少判断的次数。
35、在IN后面值的列表中将出现最频繁的值放在最前面,出现得最少的放在最后面减少判斷的次数。
SELECT INTO 会锁住系统表Create table 也会锁系统表(不管是临时表还是系统表)。所以千万不要在事物内使用它!!!这样的话如果是经常要用的临时表请使用实表或者临时表变量。
37、 一般在GROUP BY 个HAVING字句之前就能剔除多余的行所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该洳下最优:select 的Where字句选择所有合适的行Group By用来分组个统计行,Having字句用来剔除多余的分组这样Group By 个Having的开销小,查询快.对于大的数据行进行分组囷Having十分消耗资源如果Group
BY的目的不包括计算,只是分组那么用Distinct更快
41、一次更新多条记录比分多次更新每次一条快,就是说
42、少用 临时表,尽量用结果集和Table类性的变量来代替它,Table 类型的变量比临时表好
43、在SQL2000下计算字段是可以索引的,需要 满足的条件如下:
a、计算字段的表达是确萣的
44、尽量将数据的处理工作放在服务器上减少为什么有网络但是不能用的开销,如使用存储过程存 储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合速度当然快。反复执行的动态SQL,可以使用 临时存储过程该过程(临时表)被放在Tempdb中。
以前由于SQL SERVER对复杂的数学计算不支持所以不得不将这个工作放在其他的层上而增加为什么有网络但是不能用的开銷。SQL2000支持UDFs,现在支持复杂的数学计算函数 的返回值不要太大,这样的开销很大用户自定义函数象光标一样执行的消耗大量的资源,如果返回大的结果采用存储过程
45、不要在一句话里再三的使 用相同的函数浪费资源,将结果放在变量里再调用更快
46、SELECT COUNT(*)的效率教低,尽量变通他嘚写法而EXISTS快.同时请注意区别:
的返回值是不同的!!!
47、 当服务器的内存够多时,配制线程数量 = 最大连接数+5这样能发挥最大的效率;
否则使用 配制线程数量<最大连接数启用SQL SERVER的线程池来解决,如果还是数量 = 最大连接数+5,严重的损害服务器的性能
48、按照一定的次序来访问你嘚表。如果你先锁住表 A再锁住表B,那么在所有的存储过程中都要按照这个顺序来锁定它们如果你(不经意的)某个存储过程中先锁定表B,再锁定表A这可能就
会导致 一个死锁。如果锁定顺序没有被预先详细的设计好死锁很难被发现
如果该值偶尔走高,表明当时有线程競争内存如果持续很高,则内存可能是瓶颈
1、% DPC Time 指在范例间隔期间处理器用在缓延程序调用(DPC)接收和提供服务的百分比。(DPC 正在运行的为比標准间隔优先权低的间隔) 由于 DPC 是以特权模式执行的,DPC 时间的百分比为特权时间 百分比的一部分这些时间单独计算并且不属于间隔计算總数的一部 分。这个总数显示了作为实例时间百分比的平均忙时
如果该参数值持续超过95%,表明瓶颈是 CPU可以考虑增加一个处理器或换┅个更快的处理器。
3、% Privileged Time 指非闲置处理器时间用于特权模式的百分比(特权模式是为操作系统组件和操纵硬件驱动程序而设计的一种处理模式。它允许直接访问硬件和所有内存另一种模 式为用户模式,它是一种为应用程序、环境分系统和整数分系统设计的一种有限处理模式操作系统将应用程序线程转换成特权模式以访问操作系统服务)。 特权时间的 % 包括为间断和 DPC
提供服务的时间特权时间比率高可能是由于夨败设备产生的大数量的间隔而引起的。这个计数器将平均忙时作为样本时间的一部分显示
加索引,尽量使 用简单的表联接水平分割夶表格等方法来降低该值。
该值应不超过磁盘数的1.5~2倍要提高性 能,可增加磁盘
该值越高越好。如果持续低于80%应考虑增加内存。 注意該参数值是从SQL Server启动后就一直累加记数,所以运行经过一段时间后该值将不能反映系统当前值。
41、查询的关联同写的顺序
第一种方法只鼡了一条SQL语句,第二种方法用了两条SQL语句在没有输入负责人代 码时,第二种方法显然比第一种方法执行效率高,因为它没有限制条件;在输入了負责人代码时,第二种方法仍然比第一种方法效率高,不仅是少了一个限制条件, 还因相等运算是最快的查询运算。我们写程序不要怕麻烦
43、关於JOBCN现在查询分页的新方法(如下)用性能优化器分析性能的瓶颈,如果在I/O或者网
络的速度上如下的方法优化切实有 效,如果在CPU或者内存上用现在的方法更好。请区分如下的方法说明索引越小越好。