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

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. 跳表和ConcurrentSkipListMap解析

    二分查找和AVL树查找 二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存.这样查找确实很快,但是插入和删除元素的时候,为了保证元素的有序性,就需要大量的移动元素了. 如果需要的是一个能 ...

  2. 基本 Python 面试问题

    目录 1.为什么学习Python? 2.通过什么途径学习的Python? 3.Python和Java.PHP.C.C#.C++等其他语言的对比? 4.简述解释型和编译型编程语言? 5.Python解释 ...

  3. es6之后,真的不需要知道原型链了吗?

    3月份几乎每天都能看到面试的人从我身边经过,前段时间同事聊面试话题提到了原型链,顿时激起了我在开始学习前端时很多心酸的回忆.第一次接触js的面向对象思想是在读<js高程设计>(红宝书)的时 ...

  4. python cookbook3

    1.算GC含量 def validate_base_sequence(base_sequence, RNAflag = False): #判断序列是否只含有A.T.G.C.U seq = base_s ...

  5. Xamarin.Forms移动开发系列3:项目剖析

    摘要 本文主要进行Xamarin.Forms应用程序剖析. 前言 本文介绍Xamarin.Forms应用程序剖析. 由于本系列重点研究对象为Xamarin.Forms,所以对Xamarin.Andro ...

  6. 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31

    比赛链接 期望得分:100+20+20 实际得分:40+20+30 awa  cccc T1 :基于贪心的思路,然后开始爆搜(雾 那必然是会死的,好吧他就是死了 #include<iostrea ...

  7. IDEA 最新破解方法,2019 版本已支持(持续更新,更新时间2019-05-14)

    一.安装进入官网下载适合自己系统的版本,下载地址:https://www.jetbrains.com/idea/download/#section=windows ​ 2. 安装中选择适合本机的64位 ...

  8. 好用的低延迟vps

    ZeptoVM是一个俄罗斯的云提供商, 由于提供了黑龙江北边的机房, 所以延迟比较低 注意一定要选Khabarovsk节点, 这个节点延迟很低, 我在上海延迟大约有70ms 缺点就是比较贵, 按照年付 ...

  9. 【07月15日】A股滚动市盈率PE最低排名

    ​仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 方大集团(SZ000055) - 滚动市盈率PE:2.53 - 滚动市净率PB:1.13 - 滚动年化股息收益率:4.01% - 建筑 ...

  10. Feign的介绍和使用

    一.Feign的简介 Feign是一个声明式 WebService 客户端,使用Feign能够让编写Web Service 客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持J ...