1.IN 操作符 在业务密集的SQL当中尽量不采用IN操作符而使用EXISTS

2.NOT IN 操作符 强列推荐不使用

3. <> 操作符 强列推荐不使用 用其它相同功能的操作运算代替, 如 a<>0 改为 a>0 or a<0 ;a<>’’ 改为 a>’’

4. > < 操作符 推荐

5. LIKE 操作符  LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。LIKE‘%5400%’改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。

6. IS NULL IS或 NOT NULL 操作符 不推荐

用其它相同功能的操作运算代替,如a is not null 改为 a>0 或a>’’等。

7. UNION 操作符 不推荐

采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回

8.GROUP BY

9count总结

count(*)和count(1)执行的效率是完全一样的。

count(*)的执行效率比count(col)高,因此可以用count(*)的时候就不要去用count(col)。

count(col)的执行效率比count(distinct col)高,不过这个结论的意义不大,这两种方法也是看需要去用。

如果是对特定的列做count的话建立这个列的非聚集索引能对count有很大的帮助。

如果经常count(*)的话则可以找一个最小的col建立非聚集索引以避免全表扫描而影响整体性能。

10  hash的时候一定要用小记录集做驱动.
    大/小记录集作驱动时, 读取数据文件的cost两者是一样的.但是前者的记录集在大到一定程度的时候, 在构建hash桶会产生很多物理读, 而且这些物理读根本无法消除, 每次执行都会产生.

1,hash联结适合输入和输出都是大型数据集的情况。

2,联结列必须相等联结,(不相等可以如上方法换成相等联结)

3,使用较少的表为驱动表。(在使用hash提示联结尤其注意)

高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点

a)SQL的使用规范:

i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。

ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。

iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。

v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。

vii. 尽量使用“>=”,不要使用“>”。

viii. 注意一些or子句和union子句之间的替换

ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。

x. 注意存储过程中参数和数据类型的关系。

xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。   

b)索引的使用规范:

i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。

ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引

iii. 避免对大表查询时进行table scan,必要时考虑新建索引。

iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。

v. 要注意索引的维护,周期性重建索引,重新编译存储过程。  

c)tempdb的使用规范:

i. 尽量避免使用distinct、order by、group by、having、join、cumpute,因为这些语句会加重tempdb的负担。

ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。

iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。

iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。

v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。

vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。

分类: SqlServer
本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/archive/2009/09/10/1564149.html,如需转载请自行联系原作者

sqlserver操作符篇 优化相关推荐

  1. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  2. Sqlserver 高级篇 聚集索引原理

    原理 Sqlserver 高级篇 非聚集索引原理 说完非聚集索引 接着说 聚集索引 聚集索引就是把数据按照 用户设置排好顺序 与非聚集索引不同 非聚集索引不会动数据页 只会新增一个索引表  聚集索引直 ...

  3. 总结sqlserver数据库性能优化相关的注意事项

    一.分析阶段一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点 ...

  4. SqlServer 内存篇(四)—— 各部分内存不足特征及解决方法

    第二篇中学习了sqlserver内存的主要部分,第三篇中学习了如何分析sqlserver各部分内存使用,下面就来看看各部分缺少内存时的特征及相应解决方法. 一. database cache 1. 表 ...

  5. Sqlserver数据库性能优化

    很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据库服务器 做数据库服务器的那台服务器性 ...

  6. SqlServer 索引及优化

    (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonc ...

  7. sqlserver中索引优化

    背景: MRO表中TimeStamp nvarchar(32),但实际上它存储的内容是日期(2015-09-09 11:20:30). 现在我要执行这样一个sql语句: Select t10.* fr ...

  8. 寄娱于学第2天——PHP骰子游戏篇--优化

    前一篇关于PHP版本的骰子游戏(详见此),for循环的实现,在高并发下,效率显然是非常地低的. 下面是优化结果,如果您有更好的方法,望不吝赐教! <?php /** * Description  ...

  9. sqlserver mysql性能优化_sqlserver性能调优第一步

    相信不少的朋友,无论是做开发.架构的,还是DBA等,都经常听说"调优"这个词.说起"调优",可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼,不知道如 ...

  10. Linux性能优化实战: 套路篇-优化性能问题的一般方法(56)

    一.上节回顾 上一节,我带你一起梳理了,性能问题分析的一般步骤.先带你简单回顾一下. 我们可以从系统资源瓶颈和应用程序瓶颈,这两个角度来分析性能问题的根源. 从系统资源瓶颈的角度来说,USE 法是最为 ...

最新文章

  1. JPG图片EXIF信息提取工具exif
  2. .net 学习 报错 Invalid temp directory in chart handler configuration [c:\TempImageFiles\]
  3. centos7 yum安装docker
  4. python的生成器
  5. 软件包管理 之 Fedora / Redhat 软件包管理指南
  6. 配置计算机系统doc,[计算机系统配置实用程序.doc
  7. 反序列化 jackson_使用Jackson和Super类型令牌的Json反序列化
  8. Vue中组件间通信的方式
  9. python批量查询ip归属地_利用python实现批量查询ip地址归属地址
  10. Could not set the project description for 'hotelseqbid.ws' because the project d
  11. python怎么导入大小字母_python遍历小写英文字母的方法
  12. 原神 - 米游社 每日签到
  13. python 转盘 圆形,用python实现一个转盘
  14. Flutter 判断网络可用性
  15. 叶俊:没有人会把钱存在有漏洞的账户
  16. Python 医学知识图谱问答系统(一),建立医学知识图谱,基于neo4j知识图谱的医学问答体系
  17. laravel 将汉字转化成拼音
  18. php fpm 开启status,启用php-fpm状态详解
  19. 1076 Forwards on Weibo——最后用menset函数
  20. Docker上部署SpringBoot项目并推送镜像到Docker Hub上---以MacOS为例

热门文章

  1. PuTTY 私钥'putty/sshdss.c' 多个信息泄露漏洞
  2. AS 3.0 socket 通信,比较基础比较全【转载】
  3. jQuery file upload测试
  4. 实训作业 4(界面2)
  5. 【模板】线段树(区间加)
  6. 【BZOJ3631】松鼠的新家 树链剖分
  7. (转)JAVA实现Windows拨号、IP切换
  8. 你能在windows上创建一个叫做AUX的文件夹吗?
  9. c# 计算时间间隔的方法(转)
  10. 对象调用corePlot使用技巧及iOS内存优化之道