易截截图软件、单文件、免安装、纯绿色、仅160KB

sql优化之:改善SQL语句(系列三)

 二、改善SQL语句
  很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:
  select * from table1 where name='zhangsan' and tID > 10000
  和执行:
  select * from table1 where tID > 10000 and name='zhangsan'
  一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前一句则要先从全表中查找看有几个name='zhangsan'的,而后再根据限制条件条件tID& gt;10000来提出查询结果。
  事实上,这样的担心是不必要的。SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。
  虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。
  在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。
  SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:
  列名 操作符 <常数 或 变量>
  或
  <常数 或 变量> 操作符列名
  列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:
  Name=’张三’
  价格>5000
  5000<价格
  Name=’张三’ and 价格>5000
  如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL SERVER必须对每一行都判断它是否满足WHERE子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的。
介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验:
  1、Like语句是否属于SARG取决于所使用的通配符的类型
  如:name like ‘张%’ ,这就属于SARG
  而:name like ‘%张’ ,就不属于SARG。
  原因是通配符%在字符串的开通使得索引无法使用。
  2、or 会引起全表扫


相关文档:

SQL2005和(Excel |access)之间的数据导入导出


Sql代码
--采用SQL语句实现sql2005和Excel 数据之间的数据导入导出,在网上找来一--下,实现方法是这样的:    
  
  
--Excel---->SQL2005  导入:    
  
  
select * into useinfo from O ......

柳永法常用SQL语句备忘

--------------------------数据库操作--------------------------  
--建数据库  
create database yongfa365_com  
on 
( name = yongfa365_comt,  
  filename = 'd:\yongfa365_com.mdf',  
  size = 4,  
  maxsize = ......

在SQL Server 2005中实现异步触发器架构

在SQL Server 2005数据库中,通过新增的Service Broker可以实现异步触发器的处理功能。本文提供一种使用Service Broker实现的通用异步触发器方法。
在本这个方法中,通过Service Broker构造异步触发器处理架构,对于要使用这种架构的表,只需要创建相应的触发器及处理触发器中数据的存储过程,并且在异步触发器架构中登记 ......

SQL性能调校命令

DBCC DROPCLEANBUFFERS  --清除缓冲区,便于对比查询时间和性能,不收缓存的影响
SET STATISTICS TIME  ON --显示分析、编译和执行各语句所需的毫秒数
sp_spaceused NSDoctorAdvice0705 -- 查看表空间大小
问题讨论:
是否增加一个独立的文件组,用来存放索引。目前数据库的只有一个文件组,文件非常大的话, ......

利用SQL查询插入数据

如何将sql查询结果(不止一项)插入到一张表中,我们一般可以用如下形式的sql
insert into table1
select field1,field2,... from table2
where ... 
它要求对应的插入项类型必须一致。
另外,当select的查询结果是table1的所有字段的时候,可以省略table1的列字段,写成如下形式:
insert into table1(fie ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号