博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提高MSSQL数据库性能(1)对比count(*) 和 替代count(*)
阅读量:5970 次
发布时间:2019-06-19

本文共 1419 字,大约阅读时间需要 4 分钟。

原文:

文章准备的数据库: Atricles 表   数据量60690000条数据

ArticleID 主键自增列+自动建立的聚集索引,ATitle nvarchar(100)  Acontent varchar(2000) CreateDate DateTime(8)  

首先要说的是:select count(*) from table,那么count(*) 和 count(主键) count(文本列)效率比较:  这里是测试主代码

         dbcc freeProcCache  --清空SqlCache

              SET STATISTICS io ON

        SET STATISTICS time ON

        go

        ----这里是测试语句

        go

        SET STATISTICS profile OFF

        SET STATISTICS io OFF

        SET STATISTICS time OFF

那么我们来看看:

SELECT COUNT(*) FROM ATRICLES                          CPU 时间 = 1125 毫秒,占用时间 = 1140 毫秒。

SELECT COUNT(ATRICLEID) FROM ATRICLES           CPU 时间 = 1093 毫秒,占用时间 = 1094 毫秒

SELECT COUNT(ATITLE) FROM ATRICLES                 CPU 时间 = 2266 毫秒,占用时间 = 2267 毫秒

SELECT COUNT(ACONTENT) FROM ATRICLES           CPU 时间 = 2296 毫秒,占用时间 = 2303 毫秒。

Count(*) 是在处了 count(主键) 之外速度最快的  为什么最快其实我也不知道 - -! 猜想可能是SQL自动做了查询优化

 

那么我们是否一定得要 COUNT(*)呢 不是的 大家看这里:

SELECT ROWS FROM SYSINDEXES WHERE ID = OBJECT_ID('ATRICLES') AND INDID = 1

那么我们看看它和select count(主键)的比较吧:

首先是Count(主键)

表'ATRICLES'。扫描计数 1,逻辑读取 120368 次,物理读取 3 次,预读 120364 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 执行时间:  CPU 时间 = 2282 毫秒,占用时间 = 21334 毫秒。

其次是 from SYSINDEXES

表 'SYSINDEXES'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0次,lob 预读 0 次。

 SQL Server 执行时间:   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SYSINDEXES 系统表   所有的表 行集 索引信息 存放在这个表中

ID =OBJECT_ID('ATRICLES') ID的意思是 索引所属的表ID

INDID 表示在聚集索引上查找 因为主键在建立的时候已经自动的建立了聚集索引

ROWS 基于 indid = 0 和 indid = 1 的数据级行计数,如果 indid >1,则该值包含重复的计数。

这篇文章想说的是: 在分页情况下 可以考虑使用上面语句查找数据行   AND  count(*) 并不是低效率的 感谢下面朋友指教

本文结束  晚安

转载地址:http://ixwox.baihongyu.com/

你可能感兴趣的文章
一个CSS的px值转rem值的Sublime Text 3自动完成插件
查看>>
微信创始人张小龙的创业故事
查看>>
Configuring log4j
查看>>
ASP.NET Core 2.0 使用支付宝PC网站支付
查看>>
EJS 模板中,js 如何获取后端传来的数据
查看>>
ArrayList初步
查看>>
Idea debugger 无法启动-unable to open debugger port , java.net.SocketException "socket closed"
查看>>
改编163邮箱,亲测可用
查看>>
C++中const——由一个例子想到的
查看>>
并发 --- 31 进程锁 守护进程 进程队列
查看>>
Delphi中取得和设置硬盘上文件的创建日期、修改日期、访问日期、文件属性
查看>>
Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)
查看>>
for each in java script
查看>>
collections deque队列及其他队列
查看>>
【NOIP2007】第三题·守望者的逃离
查看>>
CentOS 7 安装 MySQL
查看>>
1016. Phone Bills (25)
查看>>
linux 系统优化,调优
查看>>
php新写法
查看>>
第二十九天笔记
查看>>