首页 > 其他分享 >记录工作过程中一次业务优化

记录工作过程中一次业务优化

时间:2024-03-19 17:44:27浏览次数:31  
标签:COMMENT ExamDefineId 登录 记录 业务 NULL 优化 LoginTime ExamStu

1需求

用户需要输入身份证和姓名进行登录,登录时需要判断是否存在在数据库存在,登录成功后需要记录登录的信息以及微信Id,如果用到不同的微信账号,需要记录多次记录。

2设计

2.1数据库设计

img

CREATE TABLE `ExamDefine`  (
  `Id` varchar(36) NOT NULL COMMENT '主键编码',
  `ExamName` varchar(100) NOT NULL COMMENT '任务名称',
  PRIMARY KEY (`Id`)
);
CREATE TABLE `ExamStu`  (
  `Id` varchar(36) NOT NULL COMMENT '主键编码',
  `ExamDefineId` varchar(36) NOT NULL COMMENT '任务编码',
  `StuName` varchar(100) NOT NULL COMMENT '考生姓名',
  `CertificateType` int NOT NULL COMMENT '证件类型',
  `IdentificationID` varchar(50) NOT NULL COMMENT '证件号码',
  PRIMARY KEY (`Id`)
);
CREATE TABLE `StuLogin`  (
  `Id` varchar(36) NOT NULL COMMENT '主键编码',
  `StuName` varchar(100) NOT NULL COMMENT '考生姓名',
  `IdentificationID` varchar(50) NOT NULL COMMENT '证件号码',
  `LoginTime` datetime NOT NULL COMMENT '登录时间',
  `wxId` varchar(100) NOT NULL COMMENT '微信Id',
  PRIMARY KEY (`Id`)
);
ALTER TABLE `ExamStu` ADD CONSTRAINT `ExamDefineId` FOREIGN KEY (`ExamDefineId`) REFERENCES `ExamDefine` (`Id`);

2.2业务流程

img

2.3业务统计需求

1.统计任务考生人数,已登录人数,未登录人数,多账号登录人数
2.按照曲线方式统计每天登录人数、累计登录人数

2.3.1Sql语句

  • 统计任务考生人数,已登录人数,未登录人数,多账号登录人数
SELECT
	count( 1 ) StuCount,
	Sum( LoginCount > 0 ) LoginCount,
	Sum( LoginCount > 1 ) MultipleLogins
FROM
	ExamStu
	LEFT JOIN ( SELECT IdentificationID, count( 1 ) LoginCount FROM StuLogin GROUP BY IdentificationID ) lg ON ExamStu.IdentificationID = lg.IdentificationID 
WHERE
	ExamDefineId = @ExamDefineId

ExamStu表120w记录,StuLogin表60w记录,多账号登录6w执行需要4s多(数据仅供参考)

  • 按照曲线方式统计每天登录人数、累计登录人数
 SELECT
	ROW_NUMBER ( ) Over ( ORDER BY LoginTime DESC ) AS Sort,
	LoginTime,
	Count( lg.RepeatCount > 0 ) AS LoginCount 
FROM
	ExamStu
	LEFT JOIN ( SELECT IdentificationID, DATE_FORMAT(Max(LoginTime), '%Y-%m-%d %H') AS LoginTime, Count( * ) AS RepeatCount FROM StuLogin GROUP BY IdentificationID ) lg ON ExamStu.IdentificationID = lg.IdentificationID 
WHERE
	ExamStu.ExamDefineId = @ExamDefineId 
GROUP BY
	LoginTime 
ORDER BY
	LoginTime DESC

两个表关联,又使用内置函数,需要的时间也比较久

2.4优化思路

  • 减少表关联,能尽量在一个表中统计就在一个表中进行统计
  • 减少函数使用,考虑增加冗余字段

2.4.1修改后表数据库设计

img
在ExamStu表中增加登录时间(LoginTime yyyy-MM-dd HH格式),增加登录次数,默认登录次数为0。

2.4.2修改后流程数据

img
考生登录时,同步更新考生表中登录时间和登录次数

2.4.3修改后Sql语句

  • 统计任务考生人数,已登录人数,未登录人数,多账号登录人数
SELECT
	count( 1 ) StuCount,
	Sum( LoginCount > 0 ) LoginCount,
	Sum( LoginCount > 1 ) MultipleLogins
FROM
	ExamStu
WHERE
	ExamDefineId = @ExamDefineId
  • 按照曲线方式统计每天登录人数、累计登录人数
 SELECT
	ROW_NUMBER ( ) Over ( ORDER BY LoginTime DESC ) AS Sort,
	LoginTime,
	Count( LoginCount > 1 ) AS LoginCount 
FROM
	ExamStu
WHERE
	ExamStu.ExamDefineId = @ExamDefineId 
GROUP BY
	LoginTime 
ORDER BY
	LoginTime DESC

总结

大部分人面对的编程不复杂,多注意细节。

标签:COMMENT,ExamDefineId,登录,记录,业务,NULL,优化,LoginTime,ExamStu
From: https://www.cnblogs.com/wuyongfu/p/18083082

相关文章

  • c++学习记录 STL—常用查找算法
    一、算法简介find               //查找元素find_if             //按条件查找元素adjacent_find       //查找相邻重复元素binary_search      //二分查找法count        ......
  • 优化员工,如何把艰难的抉择变简单?
    最近在大环境不太好的情况下,看到不少coder发帖说被优化掉的。作为领导者,一边是友情,一边是KPI;一边是团队凝聚力,一边是成本控制。其实这种两难非常折磨人,我把自己在辞退员工时的思考方法整理了一下跟大家分享。说明,这里讨论的范围是优化员工而非主管、高管。1、未来1-3年的绩效从......
  • c++线程池(二)——线程池优化
    文章目录概要整体架构流程技术细节小结概要增加扇入扇出:优化:子线程维护自己的本地队列分析:目前文章《线程池一》介绍了一个简单的线程池,存在多个线程同时访问一个任务队列Task,出现抢锁的情况,这样会存在一定的性能消耗,会导致有些没抢到任务的线程没事做,造成资源浪......
  • .Net Core微服务 - Serilog+Seq记录日志
    Serilog介绍Serilog是用于.NET应用程序的诊断日志记录库。它易于设置,具有干净的API,并且可以在所有最新的.NET平台上运行。Serilog通过NuGet分发,项目包括一个Seirlog核心项目Seirlog和很多接收器sinks(超过100个),这些接收是通过插件的方式来实现将日志写入到各种终端、文件......
  • 数据库查询优化:解析不使用索引的场景及对策
    数据库索引的目的是为了加快查询速度,但在某些情况下,查询可能不会使用索引,即所谓的“不走索引”。以下是一些可能导致数据库查询不使用索引的情况:全表扫描:当查询条件中的字段没有建立索引,或者查询的条件是对整个表进行范围查询(如使用 BETWEEN),数据库可能会选择全表扫描而不是使......
  • android.mk语法记录
    遇到的android.mk语法在此记录,持续更新ifeq($(TEST_PATH),)//如果TEST_PATH为空的话继续往下执行LOCAL_PATH:=$(abspath$(callmy-dir)/../..)//my-dir返回当前的路径,abspath取绝对路径TEST_PATH:=$(abspath$(LOCAL_PATH)/../../../..)elseLOCAL_PATH:=......
  • 基于多种优化算法的物联网无人机基站研究【布谷鸟搜索CS、大象群体优化EHO、灰狼优化G
     ......
  • T4模板使用记录,生成Model、Service、Repository
    自己目前在搭建一个.NETCore的框架,本来是打算使用前端做代码生成器直接生成到文件的,快做好了。感觉好像使用T4更方便一些,所以也就有了这篇文章~ 我还是有个问题没解决,就是我想生成每个类(接口)单独的文件~,如果有老师知道指点下啊~在网上找了一篇相关文章 本文也是基于这个做......
  • 【工程应用九】再谈基于离散夹角余弦相似度指标的形状匹配优化(十六角度量化+指令集加
    继去年上半年一鼓作气研究了几种不同的模版匹配算法后,这个方面的工作基本停滞了有七八个月没有去碰了,因为感觉已经遇到了瓶颈,无论是速度还是效率方面,以当时的理解感觉都到了顶了。年初,公司业务惨淡,也无心向佛,总要找点事情做一做,充实下自己,这里选择了前期一直想继续研究的基于......
  • 先进电机技术 —— 电机噪声分析与优化初探
     一、背景电机噪声的危害主要体现在以下几个方面:听力受损:长时间暴露在高强度的电机噪声环境中,容易导致听力受损,影响人们的日常生活和交流。据临床医学统计,如果长期生活在80dB以上的噪声环境中,约有50%的人容易失聪、失鸣。影响心理健康:电机噪声的高频、高强度特性可能导致人......