sql server2005查询优化建议
查询优化的目的是提高数据检索速度,提高数据检索意味着减少磁盘
IO
读取或者逻辑内存读取次数,这需要从两个方面入手:数据要尽可能的缓存到内存、尽可能的使用索引。内存的问题可以参见
:
http://msdn.microsoft.com/zh-cn/library/ms188284.aspx
,本文主要是体现如何使用索引来提高速度。具体方法:
1)
养成良好的编程习惯,比如SARG
优化(这个好像来自于sybase
)
2)
使用查询计划,看某一个查询是否是使用了索引,是否是使用了临时表,尽量使用索引,避免临时表
3)
使用查询优化顾问,它可以帮助你判断查询是否优化,并提示你建立索引
4)
使用SET STATISTICS IO
命令,查看磁盘读取次数,尽量物理磁盘和逻辑读取次数少
5)
建立主键,主键是聚簇索引,数据行基于聚集索引键按顺序存储
6)
使用组合索引,避免OR
操作符使用临时表,select * from table where a=1 or b=2,
可以考虑创建a
and b
的组合索引
7)
大数据量表使用已分区表,具体参见:
http://msdn.microsoft.com/zh-cn/library/ms345146
(
SQL.90
)
.aspx
8)
使用存储过程代替复杂sql
语句
9)
存储过程中使用表变量而不使用临时表,通常,表变量可提供更有效的查询 处理:
table
变量的行为类似于局部变量,有明确定义的作用域;在存储过程中使用
table
变量与使用临时表相比,减少了存储过程的重新编译量;涉及
table
变量的事务只在
table
变量更新期间存在。因此减少了
table
变量对锁定和记录资源的需求。但不能显式创建
table
变量的索引,也不保留
table
变量的任何统计信息。在某些情况下,可以通过改用支持索引和统计信息的临时表来改善性能。具体参见:
http://msdn.microsoft.com/zh-cn/library/ms175010.aspx
10)
当必须对临时表显式地创建索引时,或多个存储过程或函数必须使用表值时,临时表很有用。使用大容量日志模式可以提高临时表大量插入数据的效率。
相关文档:
ALTER PROCEDURE [dbo].[GetUsersList]
@BigClassID int=0,--大类别ID
@SmallClassID int=0 ,--小类别ID
@pageindex int=1,
@pagesize int=3,
@ret int output --共几条
AS
set rowcount @pagesize
if @SmallClassID>0
begin
select * from(
select id,BigClassName,SmallClassName,UserName,Corporation,r ......
在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经 ......
性能监控之监控SQL语句
分析表
analyze table tablename compute statistics for all indexes;
analyze table tablename compute statistics for all indexed columns;
analyze table tablename compute statistics for table;
监控事例的等待
select event,sum(decode(wait_Tim ......
SQL语句中的Having子句与where子句之区别
---WHERE句子作用于基本表或试图,从中选择满足条件的元组。HAVING作用于组,从中选择满足条件的组---
在说区别之前,得先介绍GROUP BY这个子句,而在说GROUP子句前,又得先说说“聚合函数”——SQL语言中一种特殊的函数。例如SUM, COUNT, MAX, AVG等。这 ......
SQL语句的优化就是将性能较低的SQL语句转换达成同样目的性能优异的SQL语句
下面我们一起来看看一些可以优化SQL的方法,希望大家多提出意见我们共同学习或者是大家有什么好的优化方法可以提出来共享一下。
第一种优化(使用指定列代替”*”)
使用“*&rdquo ......