-
Redis COPY 适合在同一实例内复制缓存或配置键,但 REPLACE、DB 和 Redis Cluster 的哈希槽限制很容易被忽略。本文用可验证命令讲清返回值、TTL、复杂度和失败边界。
-
MySQL 8.4 的资源组可以把线程或单条 SQL 放进指定 CPU 资源边界,适合给报表、后台批处理和在线请求做隔离。本文用 RESOURCE_GROUP 语句与 RESOURCE_GROUP 优化器提示演示创建、绑定、检查和回滚,并说明权限与线程范围的限制。
-
用一个带版本号的缓存写入场景,验证 Redis SET 的 GET、KEEPTTL、NX/XX 组合行为,避免更新成功却丢掉原有过期时间。
-
在SQL标准中,递归CTE是唯一可在不同数据库间移植的递归方案。它必须包含WITH RECURSIVE关键字、锚点查询(比如WHERE parent_id IS NULL)以及递归成员(通过UNION ALL连接并引用自身CTE),这三者缺一不可。而普通子查询不能自引用,只能进行单层查询。为什么不能
-
精度丢失,究其本质,乃是类型链的断裂所致。比如,BigDecimal未传递scale参数,DECIMAL列定义过窄,以及SQL Server的money类型未被MyBatis默认识别,这三种情况导致了80%以上的问题。就像BigDecimal(35.35, scale=2)最终存储为35,这是因为J
-
自关联子查询并不适宜用于查找连续记录。这是因为它高度依赖于ON条件来匹配“前一天”的数据,但在实际应用中,这很容易引发诸多问题。例如,当日期字段包含时分秒信息时,如'2026-04-01 14:22:03',减一天后变为'2026-03-31 14:22:03',这种情况下几乎难以匹配到另一条记录,
-
ORDER BY 配合 CASE WHEN 可实现分组后按业务逻辑的自定义顺序排序,需将状态映射为数值权重以避免字典序错误;MySQL 可用 FIELD() 简化,但不兼容其他数据库;动态场景应使用带索引的映射表 JOIN 排序。ORDER BY 配合 CASE WHEN 实现分组后的自定义顺序 分
-
应使用deleted_at时间戳字段(TIMESTAMP或DATETIME类型),默认为NULL;NULL表示未删除,非NULL表示已软删除,避免用is_deleted布尔字段以防语义模糊和非法赋值。软删除字段该用什么类型和默认值 直接加 is_deleted 布尔字段最常见,但容易踩坑:Postg
-
子查询中用COUNT/SUM配WHERE易出错,需显式关联外层字段;存在性判断优先用EXISTS;多状态求和宜用CASE WHEN+SUM;性能差时应检查执行计划并加索引。子查询里用 COUNT 和 SUM 配 WHERE 容易出错 在子查询中直接写 COUNT(*) 或 SUM(column) 并
-
MySQL 8.0前子查询中ORDER BY + LIMIT报错是因语法不支持,错误码1235;解决方法是外移排序逻辑,改用派生表或窗口函数,并确保WHERE条件置于窗口外、日期范围用开区间避免截断。子查询里用 ORDER BY + LIMIT 1 为什么总报错?在MySQL 8.0之前,要是在子查
-
ORDER BY RAND()在MySQL中极慢,因其必须全表扫描、为每行计算RAND()并全量排序,即使LIMIT 1也无法避免,100万行耗时可达30秒,且索引完全失效;替代方案为主键范围随机采样等避开排序的方法。因为 RAND() 在大多数数据库里触发全表扫描 + 全行随机数计算 + 全量排序
-
动态字段名拼接必须白名单校验,且参数绑定须用计算属性语法;JSONB模糊查询需确保字段为JSONB类型并建GIN索引;复杂场景应改用原生SQL+占位符参数化。动态字段名拼接必须白名单校验TypeORM的andWhere对于字段名(比如JSONB路径row_data->>'Location'里的Loc
-
STRING_AGG必须指定非NULL分隔符且排序需在函数内显式声明;它自动跳过NULL但保留空字符串,应优先于array_agg+array_to_string,处理数组字段需先unnest。STRING_AGG 语法必须带分隔符,不能省略或传 NULL 在PostgreSQL 15里,STRIN
-
A VG()忽略NULL是标准行为,但会导致业务语义错位、报表失真、基数不可知、全NULL组返回NULL及COALESCE与A VG嵌套语义混淆等问题。A VG() 忽略 NULL 不是 bug,是标准行为;但业务上常把它当“没影响”,结果算出的平均值根本不是你想要的那个“平均”。 A VG() 的
-
一对一关联表中间出现重复行,这表明右表的外键实际上并非唯一。我们应当先通过SELECT foreign_key, COUNT() FROM child_table WHERE foreign_key IS NOT NULL GROUP BY foreign_key HA VING COUNT() >