从统计数据表记录总数谈SQL_Server查询优化

来源:互联网
发表时间:2012/1/17 0:41:51
责任编辑:王亮
字体:
   对于select count(*) , 倘若表中有多个索引,则SQL Server的处理与通常的查询语句不同.在统计刻录总数时,聚集索引向来得不到数据库引擎的宠幸,除非WHERE子句中包含聚集索引所在的字段. WHY? 我们知道,大量的磁盘I/O是非常耗时的. 扫描任何一个索引都可以计算出刻录的总数,计算方式也是大致相同的,但非聚集索引的叶子层仅包含索引而没有每条记录的具体数据,通常比聚集索引占用的页面要少的多,从而大大减少了磁盘I/O ,缩短了计算时间.如果索引所在的字段包含在WHERE子句中,则仅需扫描部分叶子节点就能计算出总数,所需时间会更短.   由上而知若要优化select count(*) 或类似的语句,可考虑另外创建非聚集索引.如果select count(*) 语句包含WHERE 子句或 Group by 子句,则索引最好建立在子句所引用的字段上.当然数据库维护索引是需要代价的,设计时应通盘考虑.    当数据表中的记录非常多时,不论怎样建立索引,查询记录总数都还是需要一定时间. 如果我们不希望查询影响数据表的更新操作,则可以考虑使用WITH(NOLOCK) 查询提示. 如 select * from table WITH(NOLOCK) ,允许数据库引擎在统计过程中更新数据,或在更新中途执行统计查询,牺牲查询结果的准确性换取并发性能. 顺便说一句,这里的NOLOCK并不是什么数据都不锁,而是READUNCOMMITTED, 即允许读取可能会最终回滚(即放弃)的中间数据.在SQL Server2005 中,如果启用了基于行版本控制的隔离级别,则WITH(NOLOCK)就不需要了.数据库默认为已提交读隔离级别,可通过将READ_COMMITTED_SNAPSHOT 数据库选项设置为ON来使用行版本控制, 如下: ALTER DATABASE AdvertureWorks SET READ_COMMITTED_SNAPSHOT ON;     如果我们只是希望简单得到表中记录的总数而不指定过滤条件,则无需执行Select count(*) 语句, 调用sp_spaceused 存储过程几乎可立即得到结果. 如: EXEC  sp_spaceused 'table_name'  该存储过程返回包含多个字段的统计结果,其中rows 字段即为记录总数. 这是由于默认情况下,数据库引擎自动更新表及索引的统计信息.不过数据库管理员可以修改这一默认设置,如果您是数据库管理员,则可放心使用这个存储过程. 在SQL Server2005中,您会发现sys.partitions 视图比 sp_spaceused存储过程更好用.    如果数据表中包含自动增长字段,且在该字段上建有索引,我们还可以通过 比较该字段的最大值和最小值来估算记录的大致数量,因为在有索引的字段上调用MAX()和MIN()不需要逐一扫描数据页. 该方式可以指定其他过滤条件. 如 select max(id) +1 -min(id) from 'table' where country='cn'如果自增列增量不为1,则统计结果减倍.    注意SQL Server中有多种原因会导致表中实际的自动增长字段不完全是连续增长的.
www.xue163.com true http://www.xue163.com/exploit/160/1601380.html report 1691 从统计数据表记录总数谈SQL_Server查询优化,对于selectcount(*),倘若表中有多个索引,则SQLServer的处理与通常的查询语句不同.在统计刻录总数时,聚集索引向来得不到数据库引擎的宠幸,除非WHERE子句中包含聚集索引所在的字段.WHY?我们知道,大量的磁盘I/O是非常耗时的.扫...
最近关注
首页推荐
热门图片
  • 上一篇文章:T-SQL编码标准
  • 下一篇文章:SQL 海量数据查询优化技巧
  • 最新添加资讯
    24小时热门资讯
    统计数据 记录总数java获取数据表记录数统计数据 总数添加数据表中数据记录mysql 数据表最大记录labview 记录数据表格sql 查询数据表记录数健身记录数据表格微信发送记录数据表excel统计数据总数已知数据总数是30已知数据总数是300sql查询数据总数已知数据总数菌落总数原始数据菌落总数数据
    精彩资讯
    精彩推荐
    热点推荐
    真视界
    精彩图片
    社区精粹
    关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
    Copyright © 2004-2016 Xue163.com All Rights Reserved. 中国mr007 版权所有
    京ICP备10044368号-1 京公网安备11010802011102号
    mr007 | 软件教室 | 设计大全 | mr007相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | mr007中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 猎奇 | 精彩看点 | 图库 | mr007 | 软件教室 | 设计大全 | mr007相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | mr007中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 猎奇 | 精彩看点 | 图库编程 方案 信息windows方案windows answer文档机构教育文档问答中心IT编程数码信息解决方案信息中心IT科技