SQL性能学习汇总

 1 1.在一条语句中不要重复使用相同的函数
 2 2.尽可能在存储过程中使用临时变量和临时表
 3   如   IF (Object_ID(‘tempdb..#T‘) IS NOT NULL) DROP TABLE #T
 4           SELECT … INTO #T FROM…
 5        DROP TABLE #T ;
 6 3.当用SELECT INTO时,它会锁住系统表(SYSOBJECTS,SYSINDEXES等等),
 7 阻碍其他连接的存取。所以在创建临时表时应该用显示申明语句,
 8 即不在事务内使用SELECT INTO语句。
 9         select into  #T  .......
10         Begin tran
11           update  #T .......
12         end  tran
13 4.存储过程中涉及更改数据时一定要使用try  catch  事务  回滚等
14 5.SELECT子句中避免使用‘*‘   尽可能的写出需要查询的字段名
15 6.条件中尽量少用否定类型的运算符,条件中尽量少用
16 ‘<>‘, ‘!=‘‘NOT IN‘, ‘NOT EXISTS‘,‘NOT LIKE‘等否定类型的运算符,
17 因为它们不走索引全是表扫描  效率高低比较EXISTS > IN > NOT EXISTS > NOT IN,
18 所以可用EXISTS代替IN的使用, NOT EXISTS或(OUTER JOIN)代替NOT IN的使用。
19 7.在WHERE条件中IN后的值排序为先繁后少,减少判断次数
20 8.避免在索引列上使用IS NULL 和 IS NOT NULL。NULL条件将使该索引无法作用。
21 9.尽可能不在条件中使用函数
22 10.用‘>=‘,‘<=‘替代‘>‘,‘<‘
23     示例(不推荐)
24         SELECT EmpNO
25         FROM  EMP
26         WHERE DeptNO > 3;
27     示例(推荐)
28         SELECT  EmpNO
29         FROM  EMP
30         WHERE DeptNO >= 4;
31         两者区别在于,前者DBMS将直接跳到Dept等于4的记录而后者将首先定位
32         到DeptNO = 3的记录再向前扫描到第一个Dept大于3的记录
33 11.UNION代替OR的使用
34 12.TOP + 数值 替代 TOP + 百分比 的使用
35 13.尽量使用精准查询
36     在LIKE语句中,若能确定使用LIKE‘a%‘则不用LIKE‘%a‘或LIKE‘%a%‘
37     因为前者能用上索引,而后两者则不能。
38     且LIKE‘%a%‘查询时的耗时和字段值总长度成正比,
39     所以用VARCHAR比用CHAR类型较高效。
40     如果能精准查询则坚决不能采用模糊查询。
41 14.条件允许时UNION ALL替代UNION的使用
42 15.没有必要时不用DISTINCT和ORDER BY
43     DISTINCT和ORDER BY这些动作可以改在客户端执行。
44     它们增加了额外的开销。这同UNION和UNION ALL一样的道理
45 16.使用批处理更新语句,一次更新多条记录比分多次更新而每次更新一条语句快。
时间: 2024-08-15 01:22:47

SQL性能学习汇总的相关文章

MySQL学习笔记—SQL服务器模式汇总

MySQL学习笔记-SQL服务器模式汇总 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用–sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(–sql-mode ="&q

一个有趣的SQL Server 层级汇总数据问题

看SQL Server大V宋大侠的博客文章,发现了一个有趣的sql server层级汇总数据问题. 具体的问题如下: parent_id emp_id emp_name total_amout     NULL 2 Andrew 200     2 1 Nancy 100     2 3 Janet 120     3 4 Michael 80     1 5 Robert 50     每个员工的总销售额=自己的销售额+其下级员工的总销售额,     比如:     Andrew = 200_

SQL的学习

SQL的学习之路,主要参考资料是: SQL必知必会 W3school的SQL简介 操作使用的数据库为Access及MySQL. 数据采用的是SQL必知必会中的数据(最下方可以下载数据).其有5个表,表的关系如下: 看不清的图片:右击新标签页打开即可. 1.SQL基础 2.检索数据 3.排序检索数据 4.过滤数据 5.高级过滤 6.通配符过滤 7.创建计算字段 8.函数特性 9.函数   10.汇总数据 11.分组数据 以上测试均在Access数据库中进行,以下于MySQL中进行,通过workbe

SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)

--SQL Server2008 程序设计 汇总 GROUP BY ,WITH ROLLUP  WITH CUBE  GROUPING SET(..) /******************************************************************************** *主题:SQL Server2008 程序设计 汇总 group by ,WITH ROLLUP  WITH CUBE *说明:本文是个人学习的一些笔记和个人愚见 *      有很多

SQL 语句学习

Sql语句学习 一. select playerId, count(playerId) as num from OperateLog_$i where playerId > 0 and rootId = 12 and typeId = 12156 and actionTime >= 1381509000000 and actionTime <= 1381511220000 group by playerId having count(*) > 2; this-- > 可以计算

SQL触发器学习

? 简介 触发器是一种特殊类型的存储过程.触发器分为: DML( 数据操纵语言 Data Manipulation Language)触发器:数据库中表或视图的数据更改时触发,包括insert,update,delete语句 DDL(数据定义语言 Data Definition Language)触发器:表或索引中的create.alter.drop语句. 登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发. ? 优劣 可以强制执行业务规则: Microsoft SQL Serve

SQL性能调优

部分转自:http://www.cnblogs.com/luckybird/archive/2012/06/11/2544753.html 及http://www.cnblogs.com/kissdodog/p/3160560.html 着色部分为实际解决问题的过程 最常见的索引问题查找: 1.检查实际执行计划,使用图形化或者在执行语句前增加 set statistics profile on 检查其中操作行数/执行次数/执行时间最多的地方 2.在发现问题的地方,检查表的索引情况,注意其中Row

Oracle 数据库SQL性能查看

作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看oracle性能的一些实用方法: 1.查询每台机器的连接数 select t.MACHINE,count(*) from v$session t group by t.MACHINE 这里所说的每台机器是指每个连接oracle数据库的服务器,每个服务器都有配置连接数据库的连接数,以websphere

SQL语句学习手册实例版

SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, 0) NOT NULL SNAME    CHAR (8) NOT NULL AGE      NUMERIC(3,0) SEX      CHAR(2) BPLACE  CHAR(20) PRIMARY KEY(SNO)) 例2  对于表的教学管理数据库中的表 ENROLLS ,可以定义如下: C