当前位置: 首页 > news >正文

一条神奇的sql

背景:人脸闸机,每刷一次人脸,就会有一条记录插入到通行记录表。而闸机可能会多次识别同一个人的人脸,那么这时通行记录表就会插入多次同一个人的记录,同一个人的记录中,只不过通行时间不同而已

需求:查询出最新的5个人的通行记录信息(通行记录表100w条数据),mysql语法编写

你会怎么写这条sql?

原sql

SELECTa.*
FROMykt_ryface_records a
INNER JOIN ( SELECT max( record_time ) AS record_time, person_id, max( data_id ) id FROM ykt_ryface_records GROUP BY person_id 
) AS c ON a.data_id = c.id
ORDER BY record_Time DESC 
LIMIT 0,5

ykt_ryface_records 通行记录表

        data_id 主键

        person_id 刷脸人的id

        record_time 通行时间

这条sql的意思是:子查询中根据刷脸人id分组,获取最大通行时间,最大的主键id 作为一个c表,然后再匹配通行记录表a,这么写会导致全表扫描,肯定慢的,执行了几十秒才有结果

本想着在c表中加一个 limit 500,应该也可以了,当如果4个人刷了500条数据呢,那么会导致最终查询出来的数据不准确。虽然现实中这个需求不可能出现。毕竟刷脸刷几次不行,他早走别的通道去了。

后来想着在结合java代码程序执行,就是执行查500条数据的sql,返回结果集,判断结果集是否有5条数据,如果没有再查500条,一直到满足5条数据为止。这样是可行的,但感觉不爽,我喜欢一条sql搞定一切

优化的sql,本来没写出来,去趟洗手间回来就写出来了,哈哈

SELECTa.* 
FROMykt_ryface_records aINNER JOIN ( SELECT a.person_id,a.person_name,@idStr,@count,@dataid idfrom ykt_ryface_records aINNER JOIN (select @idStr:=0,@count:=0,@dataid:=0) b on (IF(find_in_set(IFNULL(a.person_id,-999),@idStr)=0,concat(@idStr:=CONCAT(@idStr,',',IFNULL(a.person_id,-999)),@count:=(LENGTH(@idStr) - LENGTH(REPLACE(@idStr,',',''))),@dataid:=a.data_id),-1) = 0 )  order by a.record_Time DESC  LIMIT 5) AS c ON a.data_id = c.id 
ORDER BY record_Time DESC

精华都在c表中的inner join,以前我都是在select 列名这用临时变量,灵机一动在inner join 的on条件后也可以用。c表的sql大概意思是,降序查询每条记录,然后对每条记录的的刷脸人id,主键id,放到临时变量中。查询逻辑如:先查第一条记录,记录了相关id,这时候的条件是on 0=0 然后查第二条,发现和第一条记录的相关id一样,就返回-1,那么条件就是 on -1 = 0,因为是内连接,所以第二条记录就没有了。按照这样的逻辑一次类推,巧妙使用limit 5就找出5个人的最新数据了。然后再作为c表关联a表查询,就避免了全表扫描了。该sql执行时间在0.1秒以下

感想:

巧妙利用临时变量,解决很多复杂的sql查询,提高效率。

相关文章:

一条神奇的sql

背景:人脸闸机,每刷一次人脸,就会有一条记录插入到通行记录表。而闸机可能会多次识别同一个人的人脸,那么这时通行记录表就会插入多次同一个人的记录,同一个人的记录中,只不过通行时间不同而已 需求&#…...

数据结构总结3:栈和队列

后续会有补充和更改 栈和队列 栈和队列也属于线性表 栈 一种特殊的线性表,只允许在固定的一端进行插入和删除元素。该端称为栈顶,另一端称为栈底。 栈中的数据遵循后进先出(LIFO)的原则 压栈/进栈/入栈:数据插入…...

私有化部署的即时通讯软件:消息、文件安全加密,全面可控

如今,数字化转型进入纵深阶段,在企业数字化转型过程中,数据规模激增,结构更为复杂,数据零散化和安全性问题日益显著,使得众多企业在数据资产管理上面临不小的挑战。企业为提高内部沟通效率,通常…...

27-Django项目实战(5)

1 歌曲搜索 音乐平台的每个网页顶部都设置了歌曲搜索功能,歌曲搜索框以网页表单的形式展示,并且以POST请求方式实现歌曲搜索功能,搜索结果显示在歌曲搜索页。歌曲搜索页由项目应用search实现,首先在search的urls.py中定义路由sea…...

【JVM】1. JVM与Java体系结构

文章目录 1.1. 前言🍉1.2. 参考书目🍉1.3. Java及JVM简介🍉1.4. Java发展的重大事件🍉1.5. 虚拟机与Java虚拟机🍉1.6. JVM的整体结构🍉1.7. Java代码执行流程🍉1.8. JVM的架构模型🍉…...

活动回顾|Kyligence x 亚马逊云科技,携手加速零售电商数智化转型

5月19日,Kyligence 与亚马逊云科技联合主办的「指标驱动,加速零售电商行业数智化转型」主题沙龙在上海成功举办。来自乐高、Kyligence、亚马逊云科技的专家分享了如何以数据和指标驱动,加速零售行业的数智化转型,并与现场观众进行…...

本科毕业生10大高薪专业出炉,IT行业赢麻了

据环球网报道,现在大学毕业生转行率高达80%! 非常后悔!有不少粉丝向播妞倾诉,曾经以为读了大学就能找到体面的工作,实际上是掉入了天坑专业,成了现实版孔乙己。 大学生找不到对口好工作,似乎已成…...

工厂安灯呼叫系统解决方案

在选择安灯呼叫系统之前,需要先了解自己的需求。不同的工厂可能有不同的需求,例如生产线的规模、生产过程中可能会出现的问题等。因此,选择安灯呼叫系统之前,需要先考虑自己的需求,以便选择到最适合自己的系统。要从多…...

微信xr-frame官方案例基础能力之渲染目标

前言:什么是渲染目标?(详见:RenderTarget-渲染目标) 在3D计算机图形领域,渲染目标是现代图形处理单元(GPU)的一个特征,它允许将3D场景渲染到中间存储缓冲区或渲染目标纹理…...

自动控制原理笔记-根轨迹法

目录 一,根轨迹的基本概念 1.根轨迹的基本概念 2.根轨迹方程 3.根轨迹方程的应用 二,根轨迹的绘制规则 【规则一】根轨迹有n条分支: 【规则二】根轨迹对称于实轴: 【规则三】根轨迹的起点和终点: 【规则四】…...

准备半个月,面试5分钟不到就凉了,问的实在太····

从外包出来,没想到竟然死在了另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以我也就忍了。没想到12月一纸通知,所有人都不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个…...

基础IO(三)

软硬链接和动静态库 1.软硬链接2.动态库和静态库2.1理解现象2.2静态库的设计2.3动态库2.4动态库的配置2.5动态库的理解 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏:【Linux…...

如何用国产DBDesginer软件进行数据库建模设计?

我们在开发软件系统之前都需要进行数据结构的建模设计,传统的都是通过PowerDesiger等国外的软件或直接Excel来进行数据库表结构设计,今天来了解一下如何使用国产软件来进行数据库建模设计 1、首先是注册DBDesigner用户( http://dbdesigner.n…...

精选 100 种最佳 AI 工具大盘点

为了应对对精简流程和数据分析日益增长的需求,整合人工智能工具在多个领域变得至关重要。 本文精选了2023年可用的100种最佳人工智能工具,旨在提高您的生产力、创造力和效率。 以下是 2023 年排名前 100 的人工智能工具: Aidoc:A…...

Recognizing Micro-Expression in Video Clip with Adaptive Key-Frame Mining阅读笔记

本文主要贡献 据我们所知,这是第一项旨在将视频剪辑中的信息时间子集的端到端学习与单个网络中的微表情识别相结合的工作。 此外,所提出网络中所有模块的设计都与输入视频剪辑的长度无关。 换句话说,网络容忍各种长度的微表情剪辑。 本文的贡…...

【SpringBoot整合RabbitMQ(上)】

一、简单的生产者-消费者 1.1、创建连接工具类获取信道 public class RabbitMqUtils {public static Channel getChannel() throws IOException, TimeoutException {//创建一个链接工厂ConnectionFactory factory new ConnectionFactory();//工厂IP 链接RabbitMQ的队列facto…...

Linux 设备驱动程序(二)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核(一) 深入理解 Linux 内核(二) Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux设备驱动开发详解 文章目录 系列文章目…...

性价比提升15%,阿里云发布第八代企业级计算实例g8a和性能增强型实例g8ae

5 月 17 日,2023 阿里云峰会常州站上,阿里云正式发布第八代企业级计算实例 g8a 以及性能增强性实例 g8ae。两款实例搭载第四代 AMD EPYC 处理器,标配阿里云 eRDMA 大规模加速能力,网络延时低至 8 微秒。其中,g8a 综合性…...

Unity VR开发教程 OpenXR+XR Interaction Toolkit 番外(一)用 Grip 键, Trigger 键和摇杆控制手部动画

文章目录 📕制作手部动画📕设置 Animation Controller📕添加触摸摇杆的 Input Action📕代码部分 在大部分 VR 游戏中,手部的动画通常是由手柄的三个按键来控制的。比如 Grip 键控制中指、无名指、小拇指的弯曲&#xf…...

H.265/HEVC编码原理及其处理流程的分析

H.265/HEVC编码原理及其处理流程的分析 H.265/HEVC编码的框架图,查了很多资料都没搞明白,各个模块的处理的分析网上有很多,很少有把这个流程串起来的。本文的主要目的是讲清楚H.265/HEVC视频编码的处理流程,不涉及复杂的计算过程。…...

Qwen2.5-7B-Instruct网络安全应用:智能威胁检测与分析

Qwen2.5-7B-Instruct网络安全应用:智能威胁检测与分析 1. 引言 网络安全运维团队每天都要面对海量的日志数据,传统的分析方法往往力不从心。安全工程师需要花费大量时间手动筛选日志、分析异常模式、编写威胁报告,这种重复性工作不仅效率低…...

DeepFlow Agent 故障排查指南:注册失败、协议解析、资源识别与配置方式赋

一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...

Arduino设备控制项目实战:从Demo代码到量产固件

1. 项目概述Goldfish4Tech 并非一个标准开源嵌入式库,其 GitHub 或公开技术平台中未收录可检索的源码仓库、API 文档或硬件设计资料。根据所提供的唯一有效输入信息——项目标题 "Goldfish4Tech"、摘要 "Arduino demo code for project"、关键词…...

107:Prompt Injection实战攻击与防御

作者: HOS(安全风信子) 日期: 2026-04-06 主要来源平台: GitHub 摘要: 本文详细介绍Prompt Injection的攻击原理、攻击类型和防御策略,通过实战案例展示攻击过程和防御方法,为构建安全的AI系统提供指导。通…...

你的Agent为什么总是“胡言乱语”?问题出在哪?

你的Agent为什么总是“胡言乱语”?问题出在哪? 关键词:大语言模型 Agent 幻觉 检索增强生成 思维链 约束提示工程 对齐 摘要:本文从“Agent胡言乱语”这一日常用户痛点切入,像剥洋葱一样一层一层揭开问题的本质——大语言模型的“幻觉(Hallucination)”与Agent构建链路中…...

物联网设备上云实战:从MCU到Linux的4种通信方案全解析(附避坑指南)

物联网设备上云实战:从MCU到Linux的4种通信方案全解析(附避坑指南) 在智能家居和工业物联网快速发展的今天,设备上云已成为实现远程监控、数据分析和智能决策的基础环节。然而,面对从资源受限的MCU到完整Linux系统的多…...

SR、JK、T、D触发器:逻辑符号解析与特性方程对比

1. 触发器基础概念与分类 在数字电路设计中,触发器(Flip-Flop)是最基础的存储单元之一。简单来说,触发器就像是一个记忆开关,能够记住1位二进制信息(0或1)。想象一下家里的电灯开关——按一下开…...

大模型推理硬件选型别再拍脑袋!SITS2026专家提炼的7步决策法(含量化评分卡+国产替代适配度评估表)

第一章:SITS2026专家:大模型推理加速硬件选型 2026奇点智能技术大会(https://ml-summit.org) 大模型推理对硬件的吞吐、延迟、显存带宽与能效比提出严苛要求。SITS2026专家团队基于千余次真实场景基准测试(包括Llama-3-70B、Qwen2-57B、Phi-…...

深入解析M.2 B Key接口在5G模块与(U)SIM卡电路设计中的关键应用

1. M.2 B Key接口与5G模块的完美结合 第一次接触M.2 B Key接口时,我完全被它的小巧和多功能性震惊了。这个看起来像迷你版SSD插槽的接口,竟然能承载5G模块这么复杂的通信功能。在实际项目中,我发现M.2 B Key接口特别适合嵌入式设备使用&#…...

5个实用技巧优化你的媒体元数据管理体验

5个实用技巧优化你的媒体元数据管理体验 【免费下载链接】jellyfin-plugin-metatube MetaTube Plugin for Jellyfin/Emby 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metatube MetaTube是一款专为Jellyfin和Emby设计的开源插件,它通过自动…...