-- 数据量比较大的情况,统计十分钟内每秒钟执行次数

declare @begintime varchar(100);    -- 开始时间
declare @endtime varchar(100); -- 结束时间
declare @num int; -- 结束时间
set @begintime = '2019-08-10 09:10:00' -- 开始时间
set @endtime = '2019-08-10 09:20:00' -- 结束时间 set @num = (select count(1) from PM_SYS_LOGINLOG where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime) print(@num)
select @num as 总条数,
AVG(调用总数) as 十分钟内每秒平均执行次数
from
(select s.请求时间,
(调用一次的总数+
(
select 调用多次 from
(
select 请求时间, COUNT(1) 调用多次 from
(
select CONVERT(varchar(100),loginTime, 20) as 请求时间, count(1) as 调用次数 from PM_SYS_LOGINLOG
where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime
group by loginTime having count(1) > 1) o where 请求时间 = s.请求时间 group by o.请求时间
) o
)
) as 调用总数
from
(
  select t.请求时间, count(1) as 调用一次的总数
from
(
select CONVERT(varchar(100),loginTime, 20) as 请求时间, count(1) as 调用次数
from PM_SYS_LOGINLOG
where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime
group by loginTime having count(1) = 1
) t group by 请求时间
) s
) m

查询前一秒执行次数

declare @str varchar(100);
set @str = convert(varchar,dateadd(ss,-1,getdate()),20)
--select @str
--print(@str) select @str as 执行时间, count(1) + (
select count(1) from (select top 20 CONVERT(varchar(100),loginTime, 20) as 请求时间,
count(1) as 调用次数 from PM_SYS_LOGINLOG
where CONVERT(varchar(100),loginTime, 20) = @str
group by loginTime
having count(1) = 2
order by loginTime desc) as o
) as 执行次数
from (
select top 20 CONVERT(varchar(100),loginTime, 20) as 请求时间,
count(1) as 调用次数 from PM_SYS_LOGINLOG
where CONVERT(varchar(100),loginTime, 20) = @str
group by loginTime
--having count(1) = 1
order by loginTime desc
) t

聚合函数分组查询最大值

select max(t.总数) as 最大值 from (select Token as 令牌, count(1) as 总数 from PM_SYS_LOGINLOG group by token having count(1) > max(1)) as t
select top 1 count(1) as 总数 from PM_SYS_LOGINLOG group by token having count(1) > 1 order by 总数 desc

第二次优化统计半个小时时间统计每秒钟执行次数条数

declare @begintime varchar(100);    -- 开始时间
declare @endtime varchar(100); -- 结束时间
--declare @tmpTab varchar(50); -- 定义临时表名称前缀
declare @num int; -- 结束时间
set @begintime = '2019-08-10 09:00:00' -- 开始时间
set @endtime = '2019-08-10 09:30:00' -- 结束时间
-- 定义临时表名称前缀加时间戳
-- set @tmpTab = '_' + DateName(YEAR,GetDate()) +  DateName(MONTH,GetDate()) +  DateName(DAY,GetDate()) +  DateName(HOUR,GetDate()) + DateName(MINUTE,GetDate()) + DateName(S,GetDate()) + DateName(MILLISECOND,GetDate()) -- set @num = (select count(1) from PM_SYS_LOGINLOG where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime) --print(@data)
print(@num)
--print(@tmpTab) -- 创建临时表 判断是否存在如果不存在则删除
if exists(select * from sys.tables where name = '_tmpTab')
begin
drop table _tmpTab
end
-- 创建临时表
create table _tmpTab
(
ID int,
LoginName nvarchar(20),
Token varchar(50),
loginTime datetime,
)
-- 将数据插入到临时表
insert into _tmpTab(id, loginName,loginTime, Token)
(select ID, LoginName, loginTime, Token from PM_SYS_LOGINLOG where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime) -- 查询统计临时表数据总条数
set @num = (select count(1) from _tmpTab) select @num as 总条数,
AVG(调用总数) as 十分钟内每秒平均执行次数
from
(select s.请求时间,
(调用一次的总数+
(
select 调用多次 from
(
select 请求时间, COUNT(1) 调用多次 from
(
select CONVERT(varchar(100),loginTime, 20) as 请求时间, count(1) as 调用次数 from _tmpTab
where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime
group by loginTime having count(1) > 1) o where 请求时间 = s.请求时间 group by o.请求时间
) o
)
) as 调用总数
from
(
select t.请求时间, count(1) as 调用一次的总数
from
(
select CONVERT(varchar(100),loginTime, 20) as 请求时间, count(1) as 调用次数
from _tmpTab
where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime
group by loginTime having count(1) = 1
) t group by 请求时间
) s
) m -- 使用完毕删除临时表
drop table _tmpTab

第三次最终优化

    declare @begintime varchar(100);    -- 开始时间
declare @endtime varchar(100); -- 结束时间
declare @startTime datetime; -- 查询开始时间
declare @num int; -- 数据总条数
set @begintime = '2019-08-10 08:00:00' -- 开始时间
set @endtime = '2019-08-10 14:20:00' -- 结束时间 set @startTime = GETDATE(); -- 创建临时表 判断是否存在如果不存在则删除
if exists(select * from sys.tables where name = '_tmpTab')
begin
drop table _tmpTab
end
-- 创建临时表
create table _tmpTab
(
ID int,
LoginName nvarchar(20),
Token varchar(50),
loginTime datetime,
) -- 将数据插入到临时表
insert into _tmpTab(id, loginName,loginTime, Token)
(select ID, LoginName, loginTime, Token from PM_SYS_LOGINLOG where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime) -- 创建临时表用于存储临时查到的数据进行求平均数
if exists(select * from sys.tables where name = '_tmpAvg')
begin
drop table _tmpAvg
end -- 创建临时表存储查询到的数据
create table _tmpAvg
(
reqTime varchar(100),
reqNum int
) -- 查询统计临时表数据总条数
set @num = (select count(1) from _tmpTab) -- 添加数据到临时表
insert into _tmpAvg(reqTime, reqNum)
(select x.reqTime, (x.reqNum+m.reqNum) as reqNum
from (
(select reqTime, sum(1) reqNum from
(select CONVERT(varchar(100),loginTime, 20) as reqTime, (count(1) * 1) as reqNum from _tmpTab
where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime
group by loginTime having count(1) = 1
) o group by o.reqTime
) as x left join
(select reqTime, sum(1) as reqNum from
(select CONVERT(varchar(100),loginTime, 20) as reqTime, (count(1) * 2) as reqNum from _tmpTab
where CONVERT(varchar(100),loginTime, 20) >= @begintime and CONVERT(varchar(100),loginTime, 20) <= @endtime
group by loginTime having count(1) = 2
) o group by o.reqTime
) as m on x.reqTime = m.reqTime)) select DATEDIFF(MILLISECOND, @startTime, GETDATE()) as 查询耗时单位秒, @num as 数据总条数, avg(reqNum) 每秒钟执行次数, @begintime 查询开始时间, @endtime as 查询结束时间 from _tmpAvg -- 使用完毕删除临时表
drop table _tmpAvg
drop table _tmpTab

最后优化结果:平均每秒钟执行计算 10 条数据

新手初来乍到:代码亲笔手写,高手路过勿喷,请多多指点

原链接:https://www.cnblogs.com/FGang/p/11330736.html

sql server 大数据, 统计分组查询,数据量比较大计算每秒钟执行数据执行次数的更多相关文章

  1. SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题

    SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题 基于物理块变化的复制,没有并行也是很快的. 逻辑复制的日志是按事务结束的时间排序的,而物理复制是与事务无关的, ...

  2. SQL Server 按某一字段分组 取 最大 (小)值所在行的数据

    SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23 ...

  3. Sql Server来龙去脉系列之三 查询过程跟踪

    我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更 ...

  4. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  5. 在SQL Server 2016里使用查询存储进行性能调优

    作为一个DBA,排除SQL Server问题是我们的职责之一,每个月都有很多人给我们带来各种不能解释却要解决的性能问题. 我就多次听到,以前的SQL Server的性能问题都还好且在正常范围内,但现在 ...

  6. SQL Server,Access数据库查询易混点和C#中parameter指定参数长度的优缺点

    在学校的时候就经常做一些网站,所以这次在公司实习,组长第一次给了一个企业的网站还是很快的完成了.中间并没有遇到什么大的问题,但是还是遇到了两个新手非常容易混淆的小问题,所以拿出来跟大家分享一下. 主要 ...

  7. 在SQL Server中用好模糊查询指令LIKE

    简介:like在sql中的使用 在SQL Server中用好模糊查询指令LIKE 查询是SQL Server中重要的功能,而在查询中将Like用上,可以搜索到一些意想不到的结果和效果,like的神奇之 ...

  8. 在SQL Server中用好模糊查询指令LIKE (转载)

    like在sql中的使用:在SQL Server中用好模糊查询指令LIKE:查询是SQL Server中重要的功能,而在查询中将Like用上,可以搜索到一些意想不到的结果和效果,like的神奇 一.一 ...

  9. SQL Server 锁表、查询被锁表、解锁相关语句

    SQL Server 锁表.查询被锁表.解锁相关语句,供参考. --锁表(其它事务不能读.更新.删除) BEGIN TRAN SELECT * FROM <表名> WITH(TABLOCK ...

  10. sql server Service Broker 相关查询

    sql server Service Broker 相关查询 -- 查看传输队列中的消息 --如果尝试从队列中移除时,列将表明哪里出现了问题 select * from sys.transmissio ...

随机推荐

  1. E05 【餐厅】What kind of coffee or tea would you like?

    核心句型 What  kind  of  coffee or tea would you like? 你想喝什么咖啡或者茶? What  would  you like? 你喜欢什么?/你想要什么? ...

  2. 柯里化currying + 隐式调用 = 一个有名的add面试题

    柯里化 =================================== 维基百科解释: 柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参 ...

  3. zz图像、神经网络优化利器:了解Halide

    动图示例实在太好 图像.神经网络优化利器:了解Halide  Oldpan  2019年4月17日  0条评论  1,327次阅读  3人点赞 前言 Halide是用C++作为宿主语言的一个图像处理相 ...

  4. 成神之Java之路

    既然励志在java路上走的更远,那就必须了解java的路径.先看图 image.png 更加细化的细节如下 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的 ...

  5. 记一次linux下安装redis, 设置redis服务, 及添加环境变量

    一. redis的安装 cd /opt                                                                                # ...

  6. Redis删除特定前缀key的优雅实现

    还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹! Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案 re ...

  7. Ztree + bootstarp-table 使用

    Ztree + bootstarp-table  使用 一. Ztree 1.引入js/css文件  Ztree官网 <!--ztree--> <link rel="sty ...

  8. [LeetCode] 212. Word Search II 词语搜索之二

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...

  9. Elasticsearch由浅入深(八)搜索引擎:mapping、精确匹配与全文搜索、分词器、mapping总结

    下面先简单描述一下mapping是什么? 自动或手动为index中的type建立的一种数据结构和相关配置,简称为mappingdynamic mapping,自动为我们建立index,创建type,以 ...

  10. 联合CRF和字典学习的自顶向下的视觉显著性-全文解读

    top-down visual saliency via joint CRF anddictionary learning 自顶向下的视觉显著性是使用目标对象的可判别表示和一个降低搜索空间的概率图来进 ...