sql开发中容易忽视的一些小地方(三)

sql开发中容易忽视的一些小地方(三)

ID:24192461

大小:51.50 KB

页数:4页

时间:2018-11-12

sql开发中容易忽视的一些小地方(三)_第1页
sql开发中容易忽视的一些小地方(三)_第2页
sql开发中容易忽视的一些小地方(三)_第3页
sql开发中容易忽视的一些小地方(三)_第4页
资源描述:

《sql开发中容易忽视的一些小地方(三)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、SQL开发中容易忽视的一些小地方(三)>>教育资源库  索引定义:微软的SQLSERVER提供了两种索引:聚集索引(clusteredindex,也称聚类索引、簇集索引)和非聚集索引(nonclusteredindex,也称非聚类索引、非簇集索引)。  SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:列名操作符<常数或变量>或<常数或变量>操作符列名列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。  SARG的意义:如果一个阶

2、段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。  讨论问题:现在有些观点直接说in不符合SARG标准,故在查询中全产生全表扫描.  我的观点:这个观点在早期的数据库中可能是这样,起码SQL2005足以证明上面的说法是错误的.  案例:有一会员表(member),里面包含代理信息,其中代理号proxyID上创建有索引.数量量在百万以上。  需求:查询指定代理的代理信息.  查询SQL:  方法1: select相关字段frommembermembermemberwhereproxyID='I

3、D1'        unionall        ...  如何比较:  第一:proxyID的数量比较多,我测试时输入了30个proxyID  下面是两种方法的执行计划图:  1:unionall的执行计划图:由于图比较长,所有分成两部分显示.      2:in的执行计划图:    结论:  1:无论哪种方法,都会用上索引.  2:两都的执行计划不同:当proxyID的数量比较多时,用in会直接查找索引,并有过滤的操作.unionall则是连接了n个嵌套查询.  3:代理号比较多时,unionall的效率明显高于in  第二:p

4、roxyID的数量比较小,现在分别输入两个,6个,15个,执行计划图可以看出,当proxyID的数量为15时,直接查找索引,而2个和6个时都选择嵌套查询来完成.因为unionall的执行计划图总是一样的,所有贴于不同proxyID下,用in查询的执行计划图:  1:两个代理的执行计划图:    2:六个代理的执行计划图:    3:十五个代理的执行计划图:    结论:  1:无论哪种方法,都会用上索引.  2:proxyID的数据量比较小的时候在执行时间上和unionall差距不大.  3:in里面的数据个数不同时,执行计划也会相应的同,数据

5、量小时会采用嵌套查询,反之则直接查询索引以及其它相关辅助操作.  结论:现在的数据库引擎一般都会通过查询成本分析来选择最优的查询算法来执行,不能把以前的观点拿到现在说.in与unionall的差别并不是永远不变的,看什么情况而定.类似in的还有or,对于or,有观点也说不能应用索引,其实和in一样,高版本中的都会用上索引.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。