文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程MYSQLSQL Server 索引结构及其使用(二)
精品推荐
特别推荐
·MySQL数据库简介
·安全的配置和应用MySQL数据库
·修改MySQL的默认密码
·初学MYSQL应知道:Mysql参数优化
·数据库安全应用 使用MySQL的23个注意事项
·入门:MYSQL基础
·轻松描述Windows上安装多个Mysql的步骤
·安装与卸载MySQL数据库系统服务的常见问题
·Mysql 安全注意事项
·初学MySql5 所应了解的知识和常见问题
·MySQL数据库学习手册之安装MySQL
·无法远程登入MySQL数据库的三种解决办法
·讲解Ubuntu下MySQL数据库安装后初步设置
·MySQL数据库管理员迅速回答常见问题汇总
·详细介绍优化mysql性能的十个参数
·MySQL中执行SQL语句时的两个注意点
·帮助你如何迅速优化你MySQL数据库性能
·PHP+MYSQL建设网站程序需要注意两点
·资深专家手把手教你安装MYSQL数据库
·实战经验:PHP+MySQL数据库论坛简易通
热点TOP10
·MySQL ODBC进行MySQL和SQL Server转换
·MySQL中MyISAM引擎与InnoDB引擎性能简单测试
·技巧之Mysql 导出数据表结构
·Mysql数据库关于InnoDb的使用详解
·数据库关于InnoDb的使用详解
·MySQL的启动方法(windows 平台)
·修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)
·安全的配置和应用MySQL数据库
·MySQL数据库字符集的出错故障
·让Windows在IIS支持PHP和MySQL
·快速掌握 MySQL数据库中触发器的应用
·数据从MySQL迁移到 Oracle的注意事项
·MySQL管理工具SQLyog最新6.1下载
·mysql导入数据库文件最大限制的修改方法
·SQL Server 2008 几项新特性概述
·MySQL安装的故障诊断与排除(Windows环境)
·快速掌握 SQL Server 的任务调度
·PHP5对Mysql5的任意数据库表的管理代码示例
·怎样从Windows命令行启动MySQL?
·怎样测试 MySQL安装是否成功?

SQL Server 索引结构及其使用(二)

日期:2007年2月10日 作者: 查看:[大字体 中字体 小字体]


改善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>10000来提出查询结果。
  事实上,这样的担心是不必要的。SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。
  虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。
  在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。
  SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:

列名 操作符 <常数 或 变量>或<常数 或 变量> 操作符列名
列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:

Name=’张三’价格>50005000<价格Name=’张三’ and 价格>5000
  如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL SERVER必须对每一行都判断它是否满足WHERE子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的。
  介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验:

1、Like语句是否属于SARG取决于所使用的通配符的类型

如:name like ‘张%’ ,这就属于SARG而:name like ‘%张’ ,就不属于SARG。
原因是通配符%在字符串的开通使得索引无法使用。

2、or 会引起全表扫描
  Name=’张三’ and 价格>5000 符号SARG,而:Name=’张三’ or 价格>5000 则不符合SARG。使用or会引起全表扫描。

3、非操作符、函数引起的不满足SARG形式的语句
  不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。下面就是几个不满足SARG形式的例子:

ABS(价格)<5000Name like ‘%三’有些表达式,如:WHERE 价格*2>5000SQL SERVER也会认为是SARG,SQL SERVER会将此式转化为:WHERE 价格>2500/2
但我们不推荐这样使用,因为有时SQL SERVER不能保证这种转化与原始表达式是完全等价的。

4、IN 的作用相当与OR

语句:

Select * from table1 where tid in (2,3)和Select * from table1 where tid=2 or tid=3
是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。

5、尽量少用NOT

6、exists 和 in 的执行效率是一样的
  很多资料上都显示说,exists要比in的执行效率要高,同时应尽可能的用not exists来代替not in。但事实上,我试验了一下,发现二者无论是前面带不带not,二者之间的执行效率都是一样的。因为涉及子查询,我们试验这次用SQL SERVER自带的pubs数据库。运行前我们可以把SQL SERVER的statistics I/O状态打开:

(1)select title,price from titles where title_id in (select title_id from sales where qty>30)
该句的执行结果为:

表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。
表 ''titles''。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。

(2)select title,price from titles        where exists (select * from sales        where sales.title_id=titles.title_id and qty>30)
第二句的执行结果为:

表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。
表 ''titles''。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。

我们从此可以看到用exists和用in的执行效率是一样的。

7、用函数charindex()和前面加通配符%的LIKE执行效率一样

[1] [2] [3] 下一页 




上一篇:SQL中查询数据表字段名称的查询语句

下一篇:103个Windows XP运行命令

SQL Server 索引结构及其使用(二) 相关文章:
·IE7.0浏览器有用的9个使用技巧
·GHOST使用方法(图解)
·Vista系统使用技巧总结
·QQ空间导航代码最新版使用方法
·电脑使用一段时间后会变慢原因解析
·溯雪使用说明
·解惑无权使用网络资源共享故障
·TninkPad笔记本电池使用指南
·高手电脑使用心得荟萃
·身份证复印件的正确使用方法
SQL Server 索引结构及其使用(二) 相关软件:
·SQL Server 2000 基础系列课程视频
·黑客视频教程 VMware虚拟机的安装和使用
·使用GPMC随心所欲管理组策略
·黑客视频教程-灰鸽子远控使用教程
·Adobe Photoshop CS 2 简体中文使用指南
·FLASH 8中文使用手册
·注册表结构
·CIW Server Administrator
·IIS4使用手册
·混凝土结构设计规范GB50010-2002

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot