当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL教程:提高SQL执行效率的几点建议

MSSQL
MS-sql 2005拒绝了对对象 ''xxx'' (数据库 ''xxx'',架构 ''dbo'')的 SELECT 权限的解决方法
MSSQL 2005 LOG备份webshell的方法
快速将珊瑚虫IP数据库转MS SQL2005的图文教程
sql2005 远程连接问题解决方法
SQLServer 2005 列所有存储过程的语句
SQL Server 2005 模板参数使用说明
Sql Server 2005 默认端口修改方法
SQL Sever 2005 Express 安装失败解决办法
sql2005 根据指定字段排序编号
监视SQLServer数据库镜像[图文]
sqlserver2008 拆分字符串
字符串聚合函数(去除重复值)
SQL Server 2005 同步复制技术
SqlServer2005 链接服务器用法
SQL2008中 阻止保存要求重新创建表的更改 的解决方法
sql rollup用法 小计汇总
SQLServer 2008 Merge语句的OUTPUT功能
SQLServer 2008 新增T-SQL 简写语法
SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解决方法
SQL2005 学习笔记 公用表表达式(CTE)

MSSQL 中的 SQL教程:提高SQL执行效率的几点建议


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-04   浏览: 88 ::
收藏到网摘: n/a

提高SQL执行效率的几点建议:

◆尽量不要在where中包含子查询;

关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd');

◆在过滤条件中,可以过滤掉最大数量记录的条件必须放在where子句的末尾;

FROM子句中写在最后的表(基础表,driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有三个以上的连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表;

◆采用绑定变量

◆在WHERE中尽量不要使用OR

◆用EXISTS替代IN、用NOT EXISTS替代NOT IN;

◆避免在索引列上使用计算:WHERE SAL*12>25000;

◆用IN来替代OR: WHERE LOC_ID=10 OR LOC_ID=15 OR LOC_ID=20

◆避免在索引列上使用IS NULL和IS NOT NULL;

◆总是使用索引的第一个列;

◆用UNION-ALL替代UNION;

◆避免改变索引列的类型:SELECT...FROM EMP WHERE EMPNO='123',由于隐式数据类型转换,to_char(EMPNO)='123',因此,将不采用索引,一般在采用字符串拼凑动态SQL语句出现;

◆'!=' 将不使用索引;

◆优化GROUP BY;

◆避免带有LIKE参数的通配符,LIKE '4YE%'使用索引,但LIKE '%YE'不使用索引

◆避免使用困难的正规表达式,例如select * from customer where zipcode like "98___",即便在zipcode上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改成select * from customer where zipcode>"98000",在执行查询时就会利用索引来查询,显然会大大提高速度;

◆尽量明确的完成SQL语句,尽量少让数据库工作。比如写SELECT语句时,需要把查询的字段明确指出表名。尽量不要使用SELECT *语句。组织SQL语句的时候,尽量按照数据库的习惯进行组织。