数据库
最新文章
Redis发布订阅模式无持久化与确认机制,容易丢失消息。可使用列表作为临时队列存储消息,并配合独立工作线程处理,实现可靠消费。需要配置自动重连,消息体加入唯一标识防止重复,对于强顺序场景,应改用RedisStream。
MySQL调优中EXPLAIN输出type=ALL表示全表扫描需处理。诱因:对索引列用函数、联合索引只查右列、隐式类型转换、LIKE以%开头。确保索引列单独在比较操作符左侧,避免函数包裹。建索引选高选择性字段,联合索引按查询频率排序。分页用游标或子查询替代大偏移。
SQL关联查询中字段类型隐式转换会导致JOIN索引失效,表现为EXPLAIN输出type=ALL、key=NULL。避免在ON子句中使用CAST等转换函数。根治方法包括统一字段类型、清理脏数据、确保应用层传参类型正确,同时注意字符集和COLLATE不一致也会触发隐式转换。
MySQL的EVENT机制可替代cron实现数据库级定时任务,需开启event_scheduler并授予权限。示例每5分钟将超30分钟未处理的订单状态更新为过期,建议在status和created_at字段建联合索引提升性能。
Oracle12c存储过程中,游标打开瞬间锁定SCN快照,后续FETCH过程过长导致UNDO被覆盖,引发ORA-01555错误。INMEMORY及统计信息自动收集等新特性可能使执行计划突变,加剧UNDO压力,应检查执行计划突变与UNDO使用情况,并调整UNDO保留时间或增大UNDO表空间。
MySQL中计算日期差常用DATEDIFF(),返回忽略时间的整数天数差,参数顺序决定正负。需时间精度时改用TIMESTAMPDIFF(),支持指定单位。WHERE条件中函数套列名会导致索引失效,应将函数移至等号右侧,保持左侧为裸列名。
sql_mode在词法解析后、执行前进行语义校验与运行时行为裁决。ONLY_FULL_GROUP_BY引发ERROR1055;STRICT_TRANS_TABLES仅对事务型表严格校验,STRICT_ALL_TABLES作用于所有表;NO_ZERO_DATE与NO_ZERO_IN_DATE禁止零日期字面量;ANSI_QUOTES和PIPES_AS_C等。
替换插入在唯一索引检查阶段即加排他锁,普通插入仅加共享锁。冲突后替换插入不立即释放锁,需执行删除再插入,锁持有时间长、范围广,易触发死锁。高并发下热点唯一键场景尤为突出,且删除操作进一步加剧锁竞争,需优化或避免使用。
MySQL8 0默认禁止远程连接,需四步:修改bind-address为0 0 0 0,创建用户并强制指定mysql_native_password插件,放行3306端口(本地防火墙及云安全组),客户端连接时显式指定认证插件,缺一不可。
DATEPART是SQLServer AzureSQL提取日期年月函数,参数为DATEPART(unit,date)。MySQL用YEAR() MONTH(),PostgreSQL用EXTRACT(),SQLite用strftime()。跨数据库函数不通用,直接套用报错。在列上使用可能致索引失效,建议改用范围查询。
REPLACE函数仅用于字符串替换,必须配合UPDATE显式赋值才能修改数据。语法三个参数不可为NULL,区分大小写,全局替换所有匹配位置。将new_substring设为空字符串可删除子串。执行批量更新前应用SELECT验证并加WHERE条件,生产环境建议使用事务或备份。
MySQL主从复制中表结构不一致会导致SQL线程中断,报错ERROR1054或1146。可通过mysqldump--no-data对比结构差异,在从库执行ALTERTABLE前需确保主库无写入、停止从库并验证同步。pt-table-checksum能间接发现不兼容问题,建议定期检查。
phpMyAdmin主题解压后无法识别,常见原因:目录结构错误、配置文件缺失或Web服务器权限不足。主题目录须直接置于themes 根下,并包含theme json或info inc php;$cfg[ ThemePath ]必须正确,且Web服务器应允许访问静态资源,确保主题文件夹名称正确且无多余嵌套。
直接给已有表添加自增主键易因已有主键、NULL值或重复数据失败。MySQL8 0+推荐用ROW_NUMBER()分步生成序号,或显式指定ALGORITHM=INPLACE降低锁影响。大表可建新表后原子重命名切换。需验证字段非空与唯一性。
社交应用中,应在关注关系表上创建触发器,通过INSERT和DELETE自动更新用户表的粉丝数和关注数,避免频繁COUNT(*)查询的性能瓶颈,同时配合数据校验与监控机制,确保数据一致性。
