SqlServer2008查询性能优化

SQL性能杀手

在已经优化了硬件、操作系统和SQL配置的情况下,SQL中的性能杀手:

·低质量的索引

·不精确的统计

·过多的阻塞和死锁

·低质量的查询设计

·低质量的数据库设计

·过多的碎片

·不可重用的执行

·低质量的执行计划

·执行计划频繁重编译

·游标的错误使用

·数据库日志的错误配置

·过多使用或者错误配置tempdb


低质量的索引

对于一个缺乏正确索引的查询,SQL必须在执行查询时读取和处理多得多的数据,这导致磁盘、内存和CPU上有很大的压力,显著的增加查询执行时间。增加查询执行时间导致过多的阻塞和死锁。


不精确的统计

SQL服务器非常依赖基于开销的优化,所以精确的数据分布统计对于有效的索引使用极端重要。没有精准的统计,SQL内建的查询优化器就不能精确的估计查询影响的行数。



性能监测工具

运行perfmon


查询每秒登录的时间

Select cntr_value

From sys.dm_os_performance_counters

Where OBJECT_NAM = ‘’//服务器名称

And counter_name = ‘logins/sec’//每秒登录多少次


识别发生在系统中的等待,查询当前最长的等待

Select top 10 * from sys.dm_os_wait_stats

Order by wait_time_ms desc


当SQL耗尽了缓冲或内存时,SQL中的一个进程(lazy writer)必须不段的工作,这将消费额外的CPU周期并且执行附加的物理磁盘I/O将内存页面写回磁盘


通过下面语句管理最小最大内存配置。

Exec sp_configure ‘min server memory(MB)’

Exec sp_configure ‘max server memory(MB)’

注意:服务器最小内存默认值为0,最大为2147483647,服务器最大内存不能设置为小于4MB。

查询设计分析

·查询设计影响性能的方面

·查询设计有效使用索引的方法

·优化器提示在查询性能上的作用

·数据库约束在查询性能上的作用

·资源密集度较低的查询设计

·有效使用过程缓冲的查询设计

·减少网络开销的查询设计

·减少查询事务开销的技术


一般记住以下建议能确保最佳性能:

·在小的结果集上操作

·有效使用索引

·避免优化器提示

·使用域和参照完整性

·避免资源密集型的查询

·减少网络传输数量

·减少事务开销



在小的结果集上操作

应该限制操作的数据量,包括列数和行数。遵循原则:

·限制选择列表中的列数

·使用高选择性的WHERE子句来限制返回的行数


限制选择列表中的列数

不要使用输出结果不需要的列。例如select *,错误

Select [Name],TerritoryID from SalesTerritory as st

Where st.[Name] = ‘australia’

在NAME列上的覆盖索引使通过索引本身的查询很快,而不需要访问聚集索引。当开启STATISTICS IO和STATISTICS TIME开关,将得到以下逻辑读取数量和执行时间

Table ‘SalesTerritory’.Scan count 0, logical reads 2,CPU time = 0ms,elapsed time = 17ms


使用高选择性的WHERE子句

在WHERE子句中引用的列的选择性控制着列上索引的使用。



11.3有效的使用索引

索引使用的查询设计原则:

·避免不可参数化的搜索

·避免在WHERE子句列上使用算数运算符

·避免WHERE子句列上的函数


11.3.1避免不可参数化的搜索



11.3.2避免WHERE子句列上的算术运算符

如:

SELECT * FROM TABLE AS POH

WHERE POH.ID * 2 = 3400

改为

SELECT * FROM TABLE AS POH

WHERE POH.ID = 3400/2


11.3.3避免WHERE子句列上的函数

如:

SELECT D.NAME FROM TABLE AS D WHERE SUBSTRING(D.[NAME],1,1) = ‘F’

改为:

SELECT D.NAME FROM TABLE AS D WHERE D.[NAME] LIKE ‘F%’


11.4避免优化器提示


11.5使用域和参照完整性

11.5.1非空约束

非空约束用于定义特定列中不能输入NULL值从而实现域完整性。

对比没有NULL和有NULL的执行过程


没有NULL的


有NULL的,仅仅只是在后面增加了,or p.firstname is null

注意:当数据为知时,也许不能设定默认值。这时候又将出现NULL。这是不可避免的,但是要尽可能的减少这样的情况。

当不可避免的要处理NULL值时,可以使用过滤索引来从索引中删除NULL的值,从而改进索引的性能。


11.5.2声明参照完整性

声明参照完整性用于定义父表和子表上的参照完整性。它确保子表中的记录只当父表中存在对应记录时存在。这个原则唯一例外的是,链接子表和附表行的子表标识符可以为NULL值。


11.6避免资源密集型查询

减少查询覆盖的技术有:

·避免数据类型转换

·使用EXISTS代替COUNT(*)来验证数据存在

·使用UNION ALL代替UNION

·为聚合和排序操作使用索引

·避免批查询中的局部变量

·小心命名存储过程

(2013-3-25)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,698评论 0 44
  • 1. 问题的提出## 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出...
    七寸知架构阅读 5,353评论 1 111
  • 来来去去的都是这颗心,生生灭灭的皆由这个念。觉悟的人,绝不四处攀援,也不想东想西,因为他知道,所有的境缘,都是自己...
    xcy无名阅读 274评论 0 0
  • 9.21 《靠谱:顶尖咨询师教你的工作基本功》 字数: 1.《信任——直入主题回答问题》 我刚入公司不久,经理和我...
    第一个太阳阅读 282评论 0 0
  • 1,睡前泡脚15分钟,2,睡前伸上5个懒腰,3,九点以后少喝点水,4,睡前从胸正中央往肚挤眼下方推10次,5,按摩...
    我爱戏剧人生阅读 210评论 0 0