尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
MySQL单表查询详解:语法、过滤、分组与分页优化
项目概述单表查询是所有SQL能力的基石做数据库相关工作这些年我面试过不少候选人也带过刚入行的新人发现一个很普遍的现象很多人一说起MySQL就是索引优化、主从复制、分库分表但真让他写一条单表查询反而漏洞百出。其实单表查询才是整个SQL体系的根基连多表JOIN、子查询本质上都是单表查询的扩展——你连一张表的数据都查不明白后面那些复杂操作全是空中楼阁。这篇内容围绕MySQL单表查询展开从最基本的SELECT写法到WHERE过滤、排序分组、聚合统计、分页查询再到实际开发中高频踩坑点把单表查询每个环节的原理和细节讲透。适合刚入门的数据库学习者也适合写过一段时间SQL但总感觉理解不透彻、想系统补一补基础的同学。看完你会明白一条看似简单的查询语句背后有执行顺序、索引命中逻辑、数据类型隐式转换、字符集匹配等一系列门道把这些搞清楚了你写SQL的准确率和效率会明显上台阶。我尽量用大白话配合真实的业务场景来讲不堆概念直接给可复现的示例和结论这样无论你是在学基础还是想查漏补缺都能直接拿走用。1. 查询语句的整体设计与底层执行逻辑1.1 一条SELECT语句的完整面貌MySQL的单表查询语法标准形态是这样的SELECT [DISTINCT] 查询字段列表 FROM 表名 [WHERE 过滤条件] [GROUP BY 分组字段] [HAVING 分组后过滤条件] [ORDER BY 排序字段 ASC/DESC] [LIMIT 偏移量, 行数];方括号里的部分都是可选的但可选不代表可以乱写。很多新手最大的问题不是记不住语法而是分不清WHERE和HAVING到底有什么区别、GROUP BY和ORDER BY的执行先后是什么。要解决这个问题必须先理解SQL的执行顺序。1.2 逻辑执行顺序先做什么后做什么你在SQL里写的字段顺序跟数据库实际执行顺序完全是两回事。MySQL处理一条单表查询时逻辑顺序是这样的FROM先确定要查询哪张表加载表数据WHERE对表的每一行做条件过滤把不满足条件的行丢掉GROUP BY将过滤后的行按指定字段分组HAVING对分组后的结果再做条件过滤SELECT计算并投影所需的字段列表处理去重、表达式计算ORDER BY对最终结果排序LIMIT截取指定行数返回这个顺序解释了无数实际开发中的疑问。比如为什么WHERE里不能使用SELECT里定义的别名——因为SELECT执行在WHERE之后你算出来别名的时候WHERE早都跑完了。再比如为什么ORDER BY可以使用别名因为排序发生在SELECT之后此时的别名已经存在了。拿一个实际例子验证一下。假设有一张订单表orders你想查“2024年每个客户的订单总数并且只要订单总数大于3的客户”按订单数降序SELECT customer_id AS cid, COUNT(*) AS order_cnt FROM orders WHERE create_time 2024-01-01 GROUP BY customer_id HAVING COUNT(*) 3 ORDER BY order_cnt DESC;执行时MySQL先从orders表里挑出2024年以后的数据行然后按customer_id分组统计每组的行数再过滤掉统计结果不大于3的组最后把分组统计的结果按order_cnt降序排。其中SELECT子句里的别名cid在实际执行中根本不会参与WHERE/GROUP BY/HAVING阶段的处理这一点特别容易让新手困惑。1.3 理解行与列的投影概念单表查询本质上做两件事行过滤和列投影。行过滤由WHERE控制决定哪些记录能进入结果集列投影由SELECT控制决定每条记录展示哪些字段。换句话说WHERE是“横着切”SELECT是“竖着切”。这两个维度组合起来就构成了查询结果集。很多人写SQL时思路混乱就是因为他没想清楚当前这一句到底是在切行还是在切列或者两个都要切。先想清楚业务需求再落到WHERE与SELECT上写出来的语句基本不会跑偏。提示单表查询是后续所有复杂查询的底座。多表JOIN的结果本质上是先做笛卡尔积再过滤行子查询则是把一张“临时派生表”当作新的数据源再套用同样的单表查询逻辑。基础打得牢后面进阶会很顺。2. WHERE条件过滤查询的入口关卡2.1 比较运算符与等值查询WHERE最基础的作用就是等值比较和不等值比较。MySQL支持的比较运算符包括运算符含义示例等于WHERE age 18! 或 不等于WHERE status ! 1大于WHERE price 100小于WHERE stock 50不小于WHERE create_time 2024-01-01不大于WHERE score 60安全等于NULL也参与比较WHERE name NULL这里需要特别说一个开发中常见的坑用 和 NULL 比较。NULL不是0也不是空字符串它表示“未知”。WHERE name NULL永远查不出任何记录正确写法是WHERE name IS NULL。同样WHERE name ! 张三也不会返回name为NULL的行如果你确实要排除某个值且包含NULL的行必须写成WHERE name ! 张三 OR name IS NULL。2.2 逻辑运算AND、OR、NOT的搭配原则多个过滤条件可以用AND、OR、NOT组合。这里最值得记住的是两点第一AND的优先级高于OR。如果不加括号WHERE a 1 OR b 2 AND c 3会被解释成WHERE a 1 OR (b 2 AND c 3)这跟很多人的直觉不一样。所以在混合使用AND和OR的时候不要省括号宁可多写一层也不要依赖默认优先级。比如想查“a为1或者b为2且c为3”的同学写WHERE (a 1 OR b 2) AND c 3才是正确表达“条件a为1或b为2且必须c为3”。第二能用AND拆分就不要用OR堆叠。同样一个意图WHERE province 河南 AND city 郑州相比WHERE (province 河南 AND city 郑州) OR (province 河北 AND city 石家庄)并不是简单写法差异的问题如果字段上有联合索引AND条件更容易让优化器选择索引而大量OR容易让优化器放弃索引。这不是绝对的但方向上要有个数。2.3 范围查询BETWEEN、IN、LIKE范围过滤四件套各有各的使用场景和使用禁忌。BETWEEN AND包含边界值。WHERE age BETWEEN 18 AND 30等价于WHERE age 18 AND age 30。注意BETWEEN一般只用于数值和日期类型用字符串范围时要小心排序规则和字符集的影响。IN匹配列表中的任意值。WHERE status IN (1, 2, 3)比写成三个OR条件更清晰性能上也更友好。IN列表不要写太长如果枚举值太多可以先查出一张子表再JOIN效率往往更好后面会讲到子查询这里先记住结论。LIKE模糊匹配。%代表任意多个字符_代表单个字符。使用LIKE时有几个经验之谈前缀模糊查询WHERE name LIKE 张%只要name字段有普通索引优化器是有可能用上索引的。后缀模糊查询WHERE name LIKE %张因为不知道字符串开头在哪普通索引完全失效会走全表扫描。中间模糊查询WHERE name LIKE %张%同样很难用上索引。如果业务里确实需要频繁做后缀或中间模糊匹配常规做法是考虑全文索引或者用ES这类专门的搜索引擎。不要硬扛着在MySQL里写%关键字%数据量一大必然慢。2.4 隐式类型转换的隐患这个问题我在实际工作中反复遇到值得单独拿出来讲。当字段类型和查询条件的类型不一致时MySQL会自动做隐式转换但转换方向不一定是你期望的。有一个经典案例phone字段存储的是字符串类型的手机号表里有索引。你写WHERE phone 13812345678数字类型的字面量会被转换成字符串再比较吗不一定某些情况下MySQL会把字段隐式转换成数字去比较导致这个字段上的索引失效变成全表扫描。再比如数字字段上写了WHERE num 123字符串123会转成数字123走索引没问题。但反过来字符串字段上写WHERE str 123风险就很高。所以最稳妥的做法是写查询条件时字面量的类型严格跟字段类型保持一致不要指望MySQL帮你做智能转换。你省了一时的事可能丢的是查询性能。3. 排序与分组数据组织的两个关键操作3.1 ORDER BY排序的底层逻辑与索引关系ORDER BY用来对结果集排序默认是升序ASC可以指定DESC降序。它可以按多个字段排序规则是从左到右依次作为排序关键字SELECT name, age, score FROM students ORDER BY age DESC, score ASC;这条语句先按age降序如果age相同再按score升序。多字段排序时字段顺序很重要——写在前面的优先级更高。这个不用多说关键问题是排序操作是不是一定慢答案取决于数据量和是否用上了索引。如果ORDER BY的字段恰好是索引列MySQL可以直接从索引中按顺序读取记录免去额外排序效率非常高。但如果字段不在索引上MySQL需要把结果集先放进内存或磁盘上的临时文件做filesort。数据量大时filesort是明显的性能瓶颈。实际开发中有几个优化排序的经验排序字段尽量与WHERE条件中过滤性强的字段共同组成联合索引让排序直接走索引。不要对超大文本字段或BLOB字段排序排序缓冲区扛不住。LIMIT配合ORDER BY时如果偏移量太大比如LIMIT 1000000, 20数据库要排序后丢弃前100万行效率很低。可以改用“延迟关联”或基于主键的游标分页。3.2 GROUP BY分组从“明细”到“汇总”GROUP BY的作用是把相同字段值的行合并成一组常常配合聚合函数做统计。一个简单的例子用户表user有province字段你想统计各省人数SELECT province, COUNT(*) AS user_cnt FROM user GROUP BY province;这条SQL执行后每个省份只返回一行COUNT(*)统计了该组内的行数。这里有两个核心概念需要理解清楚第一SELECT中的非聚合字段。在开启了ONLY_FULL_GROUP_BY模式的MySQL版本里SELECT后面出现的字段要么出现在GROUP BY中要么必须被聚合函数包裹。比如上面这条语句里如果SELECT还想带上city字段就会报错——因为同一省份下可能有多个城市数据库不知道你究竟要哪个城市。这种限制是合理的它强制你把分组逻辑想清楚。第二NULL值分组。GROUP BY会把NULL当作一个独立分组进行聚合。如果你不希望NULL混进统计结果可以先用WHERE或者IFNULL处理掉。3.3 HAVING分组后的二次过滤HAVING与WHERE最大的区别是时机WHERE在分组前过滤原始行HAVING在分组后过滤聚合结果。所以涉及聚合函数比较的条件只能写进HAVING。比如查“平均分大于80的班级”SELECT class_id, AVG(score) AS avg_score FROM students GROUP BY class_id HAVING AVG(score) 80;写成WHERE AVG(score) 80是错的因为WHERE执行时聚合函数还没开始计算。这里还有一个常见误区既然HAVING能做是不是所有过滤都放HAVING不是。你应该尽量先WHERE把行过滤掉减少分组和聚合的数据量最后再用HAVING过滤分组。比如统计每个班级平均分但只需要考虑成绩不为空的记录。先写WHERE score IS NOT NULL再GROUP BY最后HAVING执行效率明显好过把所有行都分组后再处理。3.4 GROUP BY与ORDER BY一起用分组后再排序这是高阶一点的组合场景。语法上很简单SELECT department, COUNT(*) AS cnt FROM employees GROUP BY department ORDER BY cnt DESC;这条语句先按部门分组统计人数再按人数降序排序。思路清晰的话你会发现GROUP BY在ORDER BY之前执行所以可以用聚合结果cnt作为排序依据。如果排序字段是分组字段本身更简单如果是聚合字段直接用别名排序即可因为ORDER BY阶段SELECT已经运行完了。4. 聚合函数与去重统计分析的效率关键4.1 五大常用聚合函数的用法和陷阱MySQL单表查询里最常用的聚合函数是五个COUNT、SUM、AVG、MAX、MIN。它们都作用于“一组行”返回一个汇总值。COUNT用于统计行数。这里有三个完全不同语义的写法COUNT(*) -- 统计该组总行数包括NULL行 COUNT(1) -- 与COUNT(*)基本等价统计总行数 COUNT(字段名) -- 统计该字段非NULL的行数COUNT(字段名)和COUNT(*)的结果很可能不同这个区别在统计“有效数据”时非常关键。比如订单表里有个字段pay_time统计“有多少订单支付过”应该写COUNT(pay_time)而不是COUNT(*)。SUM和AVG用于数值字段汇总。它们会忽略NULL值参与计算。但是一定小心AVG是SUM(字段)/COUNT(该字段非NULL行数)分母不包含NULL。如果你想要NULL当作0处理应该先IFNULL(字段, 0)再求AVG。MAX和MIN可用于数值、字符串、日期。对日期取MAX就是求最近时间这是统计用户最后一次登录的常见写法SELECT user_id, MAX(login_time) FROM user_login GROUP BY user_id。4.2 聚合与分组配合谁是维度谁是度量写聚合查询前先问自己一个问题业务需求的“维度”是什么“度量”是什么。维度是你要按什么分组比如按部门、按省份、按月份度量是你想统计什么比如人数、金额、次数。想清楚这两个聚合SQL基本就写出来了。举个例子“统计2024年每个月的销售总金额和订单数”SELECT DATE_FORMAT(create_time, %Y-%m) AS month, SUM(amount) AS total_amount, COUNT(*) AS order_cnt FROM orders WHERE create_time 2024-01-01 AND create_time 2025-01-01 GROUP BY DATE_FORMAT(create_time, %Y-%m) ORDER BY month;这里维度是月份度量是总金额和订单数。GROUP BY的字段写DATE_FORMAT表达式而不是原始create_time意味着按“格式化后的月份”分组。注意SELECT里month这个别名不能直接在GROUP BY里用部分MySQL版本允许GROUP BY别名但从规范性和可移植性角度建议直接写表达式。4.3 DISTINCT去重别滥用也别乱用DISTINCT的作用是去掉结果集中的重复行。用法有两种-- 对单个字段去重 SELECT DISTINCT province FROM user; -- 对多个字段组合去重 SELECT DISTINCT province, city FROM user;后者表示province和city的组合值不能重复。DISTINCT和聚合函数放在一起时语义会有变化。比如COUNT(DISTINCT user_id)统计的是去重后的user_id数量这在统计独立用户数UV时是最常用的写法。聚合函数加DISTINCT是有代价的数据库需要额外做去重操作数据量大时耗时明显。能用精确主键统计的就别做全字段DISTINCT能先WHERE缩小范围就尽量缩小。如果是为了看某个字段有哪些非重复值前面已经说过结论——数据量小随便用数据量大优先考虑GROUP BY方案。4.4 聚合结果为空时的处理有个容易被忽视的点如果WHERE条件过滤后没有任何行聚合查询的结果不是空表而是一行带有NULL的结果。比如SELECT AVG(score) FROM students WHERE class_id 999;这个查询没有匹配行但会返回一行这行里显示NULL。如果你在程序里直接把这个NULL转成浮点数很可能出现讨厌的空指针或类型转换异常。稳妥做法是用IFNULL包裹SELECT IFNULL(AVG(score), 0) FROM students WHERE class_id 999;同理SUM在没有匹配行时也返回NULL而不是0。这个坑在报表开发中几乎人人都会踩一遍提前知道能省不少调试时间。5. LIMIT分页与实际应用技巧5.1 LIMIT的两种写法LIMIT在MySQL里支持两种语法-- 写法一LIMIT 偏移量, 行数 SELECT * FROM orders ORDER BY id LIMIT 20, 10; -- 写法二LIMIT 行数 OFFSET 偏移量 SELECT * FROM orders ORDER BY id LIMIT 10 OFFSET 20;两种写法表达的是同一个意思跳过前面20行从第21行开始取10行。注意这里的偏移量是从0开始的所以LIMIT 0, 10取的是第1到第10行LIMIT 10, 10取的是第11到第20行。很多新手以为偏移量是从1开始结果第一页正常第二页就跳了一行数据这就是没搞清楚偏移基数的后果。5.2 分页的性能陷阱与优化方案传统分页写法是LIMIT (page - 1) * pageSize, pageSize但数据量一大问题就来了。假设每页20条查询第100000页对应的SQL是SELECT * FROM orders ORDER BY id LIMIT 1999980, 20;MySQL需要扫描排序后前1999999行然后丢弃前1999980行只返回最后的20行。前面这些数据虽然不返回但扫描和排序的代价一点没少。这就是“深度分页”问题。实际项目中两种优化方案用得最多第一种基于主键游标分页。查询时记住上一页最后一条记录的主键下一页查询直接过滤WHERE id ? -- 上一页最后一条记录的id ORDER BY id LIMIT 20;这种方案不能跳页但对于“无限滚动”类型的产品比如消息列表、动态流简直是完美方案。第二种延迟关联。先快速查出主键再关联原表取详细数据SELECT o.* FROM orders o INNER JOIN ( SELECT id FROM orders ORDER BY id LIMIT 1999980, 20 ) t ON o.id t.id;子查询里只查主键数据量小排序快拿到20个主键后再回原表取完全字段。相比直接SELECT *性能提升非常明显。注意LIMIT与ORDER BY一起使用时如果排序字段有重复值分页结果可能出现同一行数据在不同页重复出现或丢失。最稳妥的办法是在ORDER BY里追加一个唯一字段如主键保证排序的确定性。5.3 用LIMIT取最大值附近的记录不是所有LIMIT都为了分页它还经常用来“取前N条”。比如查销售额前10的订单SELECT * FROM orders ORDER BY amount DESC LIMIT 10;再比如查本月所有新用户里注册时间最早的5个人——ORDER BY注册时间升序LIMIT 5典型用法。还需要注意如果查询中涉及大量数据的排序LIMIT虽然限制了返回行数但排序依然是对全量数据做的并不因为最终只取10条就只排10条。要想真正提高性能还是得靠索引。6. 常见问题与排查技巧实录6.1 为什么SQL写对了却慢得离谱做单表查询调优第一步永远是看执行计划。在MySQL中用EXPLAIN关键字不需要真正执行查询MySQL会告诉你优化器的执行策略EXPLAIN SELECT * FROM orders WHERE customer_id 1000 ORDER BY create_time DESC LIMIT 20;看执行计划时重点看几个字段字段核心关注点type从好到差依次是system, const, eq_ref, ref, range, index, ALL。看到ALL说明没走索引是典型全表扫描key实际使用的索引名为NULL表示没有用索引rows预估扫描行数数字越大越危险Extra出现Using filesort或Using temporary时表示做了额外排序或用临时表通常有优化空间大部分“SQL写对了但慢”的问题EXPLAIN一眼就能看出根源。比如typeALL且rows有几十万说明你WHERE条件字段没有索引或者写法导致索引失效。6.2 函数包裹字段导致索引失效这是我见过最频繁的索引失效原因。假设create_time字段有索引你想查2024年创建的订单记录-- 错误示范字段被函数包裹索引失效 SELECT * FROM orders WHERE YEAR(create_time) 2024; -- 推荐写法范围查询直接命中索引 SELECT * FROM orders WHERE create_time 2024-01-01 AND create_time 2025-01-01;YEAR(create_time)这种写法等于对每一行的create_time先做函数计算再比较。索引里存储的原始值无法直接用于比较MySQL只能放弃索引。而范围查询保留了字段原始形态索引能直接定位区间性能差出几个数量级。同理对字段做字符串拼接、加减乘除运算都有类似问题。6.3 字符集和排序规则不一致导致查不到数据单表查询经常遇到一个隐形问题表字段和查询条件字符串的字符集不一致导致本来能匹配上的数据匹配不了。比如字段是utf8mb4_general_ci你写入的查询条件也是这个规则没问题但如果是不同的排序规则或字符集可能区分大小写的方式不同或某些特殊字符匹配异常。排查技巧是查看表结构SHOW CREATE TABLE orders;看到字符集后确认你的连接字符集与表一致。可以通过SET NAMES utf8mb4指定连接字符集。很多“中文查不出”“大小写匹配不上”的问题根源都在这里。6.4 分页数据错乱或重复前面提过ORDER BY字段重复会导致分页不稳定。举例你按create_time排序同一秒可能有成百上千条记录它们的create_time值完全相同MySQL对相同值的排序结果是不确定的。第一页可能返回记录A第二页又返回记录A同时记录B被漏掉。解决办法很简单排序字段后追加主键。SELECT * FROM orders ORDER BY create_time DESC, id DESC LIMIT 20;这样即使create_time相同id也给了唯一确定顺序。这个细节在数据量小的表上无所谓一旦数据量上去几乎必然出现。6.5 别在SELECT里写不必要的星号写SELECT *一时爽但带来的问题很实际传输不需要的列数据增加网络和内存开销。如果表结构变更新增了大字段查询结果集突然变大程序可能直接内存溢出。无法利用“覆盖索引”优化。覆盖索引指的是查询字段全部包含在某一个索引中数据库读索引就能拿到全部数据无需回表。你写SELECT *再有覆盖索引也覆盖不了所有字段。唯一的例外是快速探查数据时图方便生产环境建议始终明确列出字段列表。6.6 单表查询的一些实战经验速查我把实际开发中沉淀下来的几条经验做成一个速查清单方便你直接对照所有查询条件里的字符串都用单引号包起来别让数字类型和字符串类型混用。WHERE里的条件顺序不会改变执行结果MySQL优化器会自行调整但你写代码时把过滤性强的条件放前面更利于阅读。大表统计行数不要用COUNT(*)它要扫描全表。业务上精确行数可以依赖定期统计表或近似估算方案。单表查询连接池参数没调好的话再快的SQL也扛不住频繁建连但那是另一个层面了这里提醒一句。测试SQL时先用EXPLAIN看一眼再跑尤其是大表环境不要让一条烂SQL拖垮整个实例。最后分享一点自己实操的体会如果让我给正在学MySQL单表查询的人一个最重要的建议那就是多动手分析执行计划。不要满足于“结果对了就行”每次写完一条查询花十秒钟跑一下EXPLAIN看看有没有Using filesort、有没有typeALL、有没有索引失效。我见过太多人到了生产环境出问题才回头补执行计划的功课那个时候往往是几百毫秒甚至几秒的慢查询在等着他。我自己刚工作那年写过一个统计报表的SQL单表查询逻辑也不复杂就是GROUP BY加ORDER BY再加LIMIT。当时数据量只有几万行跑得飞快我就没当回事。结果业务量涨到几百万行后同一个查询从几十毫秒涨到两三秒线上报表直接超时。用EXPLAIN一看GROUP BY字段没有索引ORDER BY还触发了一次filesort临时表又占内存又占磁盘。后来加了一个联合索引把范围和分组字段一起覆盖进去查询时间直接降回几十毫秒。那次之后我就养成一个习惯凡是SQL不管初看多么简单都要用EXPLAIN验证一遍再放行。MySQL单表查询看起来是入门第一课但它值得你反复打磨。你越早理解WHERE和HAVING的边界、GROUP BY的分组语义、ORDER BY与索引的关系、LIMIT深分页的代价后面学JOIN、子查询、窗口函数就越轻松。基础地基不打牢楼盖再高也是危房。
RELATED

相关推荐

Spring框架演进与核心设计深度解析

Spring框架演进与核心设计深度解析

1. 项目概述Spring框架作为Java生态中事实上的标准,其发展历程和技术演进直接影响着数百万开发者的日常工作。从2003年Rod Johnson发布《Expert One-on-One J2EE Development without EJB》开始,Spring已经从一个轻量级的依赖注入容器,逐步演…

📅 2026/10/14 4:30:05
回收商过磅少了两百公斤说“地磅就这样“,月底结账又压价?企业微信聊天记录导出留痕攻略

回收商过磅少了两百公斤说“地磅就这样“,月底结账又压价?企业微信聊天记录导出留痕攻略

摘要 把厂里的废金属、废纸、废塑料卖给回收商,最容易出问题的是"嘴上谈的价格,落地时变了样"。价格随行就市、过磅数量不透明、结账方式口头定,这些如果只停留在语音和口头,后面对账就会各说各话。更稳的做法是&#x…

📅 2026/10/14 4:30:05
UOS系统部署Nginx Web服务器的原生适配指南

UOS系统部署Nginx Web服务器的原生适配指南

1. 项目概述:为什么在UOS上搭Web服务器不是“换个系统装Apache”那么简单“基于国产UOS操作系统第1章-web服务器”——这个标题乍看像一本教材的章节名,但实际背后藏着一个正在快速落地的现实命题:当政务、金融、教育等关键领域批量替换为统信…

📅 2026/10/14 4:30:05
MORE NEWS

更多资讯

📰

电热综合能源系统优化调度模型与Matlab实现

1. 项目背景与核心价值去年参与某工业园区综合能源系统规划时,我们遇到一个棘手问题:园区光伏发电在午间经常出现大量弃光,而晚高峰又不得不启动昂贵的燃气锅炉供热。这种供需时空错配导致全年能源成本增加12%。这正是电热综合能源系统优化调…

📰

InsightFace gaze 模块视线估计完整指南:一次 160×160 推理输出 3D 视线向量

InsightFace gaze 模块视线估计完整指南:一次 160160 推理输出 3D 视线向量 【免费下载链接】insightface State-of-the-art 2D and 3D Face Analysis Project 项目地址: https://gitcode.com/GitHub_Trending/in/insightface InsightFace 是一个 2D/3D 人脸…

📰

工程机械现场缺的不是打卡 App,是机手经营链

01|为什么要做这个产品工程机械现场,数字化并不少。项目部有智慧工地,覆盖视频监控、人员实名、验收大屏; 设备侧搭载物联网盒子,可以采集台班、油耗、运行轨迹; 团队协作大多在用钉钉、企业微信。但机队老…

📰

SpringBoot+微信小程序文具商城开发实战

1. 项目背景与核心价值微信小程序文具商城是当前校园场景下极具实用价值的毕业设计选题。作为基于SpringBoot的后端开发与微信小程序前端结合的典型电商案例,这个项目完整覆盖了商品展示、购物车管理、订单处理、支付对接等核心电商功能模块。我在实际开发过程中发现…

📰

SpringBoot+Vue+MySQL实现校园失物招领系统全流程解析

校园失物招领系统,算是毕业设计里非常经典的全栈练手项目了。核心业务直观、角色清晰、功能闭环完整,数据量不大但五脏俱全,特别适合用SpringBootVueMySQL这套主流技术栈来落地。我在帮人梳理这类项目的时候发现,很多同学拿到源码…

📰

自托管PS5聚合面板AnyPS5:统一管理状态、折扣、截图与奖杯

去年年底我把一台 PS5 挪到书房第二块屏幕旁边,本来只是想让客厅和书房都能玩,结果发现真正烦人的不是游戏运行,而是围绕主机的那些零散操作:看折扣要开一个网页,查奖杯要翻另一个 App,远程开机每次都要经过…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬