维生素C.net
Talents come from diligence, and knowledge is gained by accumulation 天才源于勤奋,知识源于积累。
难忘的1654天
博客园  首页  新随笔  新文章  联系  管理  订阅 订阅
随笔- 220  文章- 1  评论- 1645 
关于SQL Server的两个细节

前段时间看到了园子的朋友在讨论SQL Server的Paging Select问题,在感觉到有些朋友可能对SQL Server(2000以上版本的)的一些地方还不太清楚,这里分享一下SQL Server自2000版本后提供的一些特色处理方式:

TOP N排序

新的TOP N引擎可以减少以往先sort再top n的负载,当数据读入到Storage Engine时就先过滤出top n的记录,然后在对这些记录进行sort等操作,这样的设计可以在大多数情况下提升效率,缩短查询时间。

Merry-Go-Round Scans

胡百敬老师在他一本讲解性能调教的书中将其翻译为旋转木马式扫描,这个算法用于处理相同数据的重复扫描。例如我们有一页数据,两个用户都去查询它们,如果都是从page的开始部分进行scan,假设当user A scan到30%的时候user B开始scan操作,那么当user A进行到60%的时候user B刚好完成30%,这种设计可能会导致在扫描大型数据表的时候引起硬盘的剧烈震动!而采用Merry-Go-Round方式,当user A scan到30%的时候user B开始从A的当前位置scan,user A完成整个操作时user B完成了70%,然后再从页首开始scan剩下的30%,这样他们就使用相同的查询计划读取了部分数据。这种方式减少了大量在极端时间内先后查询相同的数据时,系统I/O来回读取的的情况,在增强读取速度和无序扫描的同时,也不需要同步了。

Katmai在这两方面有没有更好的改进还不知道,我的SQL Server 2008一直没法安装成功,也没法尝试一下,明天准备做虚机再试一次,有相似经历的朋友已经解决问题的还请指教一下。

posted on 2007-07-18 00:04 维生素C.NET 阅读(2759) 评论(12)  编辑 收藏 所属分类: Training@cnblogs

发表评论
  回复  引用  查看    
2007-07-18 07:02 | 布尔      
做基于数据库的MIS开发真的需要对数据库非常了解才好
  回复  引用  查看    
2007-07-18 09:48 | 随风飘散      
好文,赞一下。
  回复  引用  查看    
2007-07-18 09:50 | Anders Liu      
不错不错
  回复  引用    
2007-07-18 11:30 | RicCC [未注册用户]
记得msdn叫做shared scan的,旋转木马扫描有点别扭
  回复  引用  查看    
2007-07-18 13:10 | Anytao      
热情邀请你的加入,CLR基础研究团队,我们将主要通过邀请方式汇聚博客园的精英团队。
团队地址: http://clr.cnblogs.com/
团队邀请: http://www.cnblogs.com/anytao/archive/2007/07/16/anytao_crlteam_welcome.html
邀请邮件:taotalk@126.com
共同打造博客园的CLR基础研究世界,如果您有兴趣同意加入,可以访问邀请地址留言或者直接给我发邮件同意即可,衷心期待您的参与。
  回复  引用  查看    
2007-07-18 15:16 | zoti      
TOP N排序

新的TOP N引擎可以减少以往先sort再top n的负载,当数据读入到Storage Engine时就先过滤出top n的记录,然后在对这些记录进行sort等操作,这样的设计可以在大多数情况下提升效率,缩短查询时间。


上面這句不是太懂,麻煩解釋一下。
先Sort再Top,和先Top再Sort,結果會不一樣啊?

  回复  引用  查看    
2007-07-18 19:43 | 金色海洋(jyk)      
TOP N排序
博主没有解释清楚,其根源不在于 top n 而在于 order by 后面的字段,就是排序字段。如果排序字段有索引的话,那么top n 才能发挥威力(因为事先已经排好顺序了),否则,top n 还是要乖乖的先得到所有的结果然后在排序,最后才能 top n 。
  回复  引用  查看    
2007-07-18 21:07 | RicCC      
@zoti
传统方法:先对input排序,然后取top n
改进算法:对input进行一次扫描,使用一个临时表记录top n的内容(根据order by字段来取,每次跟踪、删除最小的记录),扫描结束后对临时表排序
  回复  引用  查看    
2007-07-19 00:35 | 维生素C.NET      
@金色海洋(jyk)
SQL Server没有那么简单,就像对于同一个查询计划第一次执行、第二次执行和以后的执行的速度/性能差异是一样的,它本身对于数据是有感知力的。数据库中的数据是无序的,即使加了索引。
  回复  引用  查看    
2007-07-19 12:57 | 金色海洋(jyk)      
数据库里的数据怎么可能是无序的呢?你说的感知力是什么?无序的怎么索引呢?
  回复  引用  查看    
2007-07-23 22:01 | volnet(可以叫我大V)      
文章精彩,评论更精彩
  回复  引用  查看    
2007-08-04 12:12 | 维生素C.NET      
@金色海洋(jyk)
看看数据库原理的书。
新用户注册  刷新评论列表  

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-07-18 00:10 编辑过
成果网帮您增加网站收入

相关文章:
关于IE问题,请教和求救
MS SQL Server 2000安装不成功的原因
最亲密接触Dhtml&JScript开发细节
终于干掉了默认的输入法, 关于ctfmon.exe文件
自动安装SQL Server数据库
写有效率的SQL查询(IV)

相关链接:

所属分类的其他文章:
关于SQL Server的两个细节
{Clingingboy}asp.net控件开发基础
{tmfc's .net cabin}[翻译]了解ASP.NET底层架构
Plan KA活动的word 2007 Publish blog的模板
viBlogging程序源代码和数据库
博客园新手提高计划
【翻译】Atlas Document : Making JavaScript Easier 简化JavaScript开发
Wayfarer的《叩开C#之门》系列(图文并茂,推荐新手认真看一看)
近期post整理
【翻译】Atlas Documents : UpdatePanel Class

最新IT新闻:
JavaScript将成Silverlight的最大对手?
没有谷歌就活不下去的四个网站
Google 10周岁生日
祝Google 10周岁生日快乐
Google十年市值达1500亿美元 创造奇迹
 



公告

view my mvp profile 看看有多少人来访问我的Blog了!
hotmail

<2007年8月>
日一二三四五六
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

与我联系

  • 发短消息

搜索

 

常用链接

  • 我的随笔
  • 我的空间
  • 我的短信
  • 我的评论
  • 更多链接
  • 我的参与
  • 我的新闻
  • 最新评论
  • 我的标签

留言簿(168)

  • 给我留言
  • 查看留言

我参与的团队

  • 北京.NET俱乐部(0/1483)
  • 烟台.NET俱乐部(0/47)
  • ASP.NET AJAX (Atlas)学习(0/1347)
  • MVP(微软最有价值专家)团队(0/568)
  • 博客园培训团队(0/111)
  • Silverlight学习与研究(0/286)
  • CLR基础研究团队(0/387)

随笔分类(148)

  • ASP.NET(26)
  • Code Warehouse(20)
  • IronRuby,DLR(2)
  • LINQ(3)
  • Reading(3)
  • Training@cnblogs(23)
  • Ubuntu(4)
  • Windows Live(6)
  • Windows Mobile(7)
  • XHTML & Web Standard(54)

随笔档案(220)

  • 2008年3月 (2)
  • 2008年1月 (3)
  • 2007年12月 (3)
  • 2007年9月 (1)
  • 2007年8月 (2)
  • 2007年7月 (3)
  • 2007年6月 (3)
  • 2007年3月 (4)
  • 2007年2月 (3)
  • 2007年1月 (1)
  • 2006年12月 (1)
  • 2006年11月 (8)
  • 2006年10月 (6)
  • 2006年9月 (11)
  • 2006年8月 (5)
  • 2006年7月 (4)
  • 2006年6月 (1)
  • 2006年5月 (10)
  • 2006年4月 (8)
  • 2006年2月 (2)
  • 2006年1月 (1)
  • 2005年12月 (11)
  • 2005年11月 (13)
  • 2005年10月 (3)
  • 2005年9月 (1)
  • 2005年8月 (4)
  • 2005年7月 (3)
  • 2005年6月 (4)
  • 2005年4月 (5)
  • 2005年3月 (10)
  • 2005年2月 (7)
  • 2005年1月 (28)
  • 2004年12月 (15)
  • 2004年11月 (10)
  • 2004年10月 (5)
  • 2004年9月 (1)
  • 2004年6月 (13)
  • 2004年5月 (5)

文章档案(1)

  • 2005年5月 (1)

相册

  • ASPNET2tutorial
  • BlogUsing
  • My love and my friends
  • newGallery
  • 下一代网络图片

.net网站收藏

  • ASP.NET2.0 Tutorial
  • CodeBetter.com
  • F#
  • IIS.net
  • MS NewsGroup
  • NewsGroups
  • OnlyVC.org
  • VWD2005GuidedTour
  • ZDNet China软件技术专区

OSS 2007

  • Charsh
  • Kaneboy
  • Official Team Blog

Python

  • BeginnersGuide

好友的BLOG

  • DemoFox@JoyCode
  • DflyingChen
  • dudu
  • EricLee
  • hbifts
  • idior
  • Jesee Qing
  • Lion
  • Rickie
  • Samuel
  • Steph`s Website
  • 翱翔.Net
  • 陈敬熙
  • 发条木偶
  • 葛涵涛
  • 古道风
  • 寒枫天伤
  • 老猫の理想
  • 刘老师
  • 刘彦博
  • 吕震宇
  • 木野狐
  • 佘广
  • 王sir
  • 小涛
  • 小新
  • 肖老师
  • 旋哥

积分与排名

  • 积分 - 395314
  • 排名 - 53

最新评论

  • 1. re: .NET Beginner Training Step by Step开始启动
  • 早班加入
  • --石牌村夫
  • 2. re: .NET Beginner Training Step by Step开始启动
  • 申请加入!谢谢!
  • --童话@混子
  • 3. re: .NET Beginner Training Step by Step开始启动
  • 申请加入
  • --Winston
  • 4. re: .NET Beginner Training Step by Step开始启动
  • 申请加入
  • --Birdshover
  • 5. re: .NET Beginner Training Step by Step开始启动
  • 喜欢没有理由!
    申请加入
  • --倔强

阅读排行榜

  • 1. 英文名字及含义(25207)
  • 2. SQL Server 2005 Remote Access(15040)
  • 3. Visual Studio 2005 Team Edition和SQL Server 2005的下载(14319)
  • 4. Windows Installer 3.1(11487)
  • 5. Visual Studio 2005 Professional Released(10949)

评论排行榜

  • 1. .NET Beginner Training Step by Step开始启动(319)
  • 2. Windows Live Messenger 8.0 Beta 的邀请(100)
  • 3. 加入[ 下一代网络web技术(Next Generation Web Application)团队Blog ](88)
  • 4. 博客园新手.net技术培训活动(55)
  • 5. 为什么在vista上做开发?(54)
Copyright ©2008 维生素C.NET