mysql.user表查得慢是因为权限检查时隐式联查多张权限表且缺乏有效索引,导致全表扫描;MySQL 5.7及以前无缓存,8.0+虽有缓存但仅在FLUSH PRIVILEGES或DDL后重建,非实时更新。mysql.user 表为什么查得慢?直接查 mysql.user 表本身不慢,慢的是每次执行权限检查时隐式触发的多表联查和元数据扫描。MySQL 在用户登录、执行语句、访问数据库对象前,会动态拼接查询去 mysql.user、mysql.db、mysql.tables_priv 等表里捞权限,这些表默认没建有效索引,且 InnoDB 引擎下全表扫描开销明显。常见错误现象:SHOW GRANTS FOR 'u'@'h' 延迟高;新建用户后首次登录卡顿;大量并发连接时 Performance_schema.threads 显示大量线程卡在 checking permissions 状态。MySQL 8.0+ 默认用缓存加速权限检查,但缓存只在用户权限变更(如 FLUSH PRIVILEGES 或 DDL)后重建,不是实时更新mysql.user 表主键是 (Host,User),但权限检查常按 User 单独查,或带通配符 Host(如 '%'),导致索引失效MySQL 5.7 及更早版本无权限缓存,每次检查都走磁盘表,压力更大FLUSH PRIVILEGES 到底要不要执行?绝大多数情况不用------而且不该随便执行。它强制清空权限缓存并重载所有权限表,会阻塞后续所有权限检查请求,造成瞬时雪崩。使用场景仅限两种:UPDATE/INSERT/DELETE 直接改了 mysql 库下的权限表(绕过 GRANT/REVOKE);或确认缓存已损坏(比如改完权限但行为没变,且确定没用 GRANT)。用 GRANT、REVOKE、CREATE USER 等 DDL 修改权限,MySQL 自动更新缓存,无需 FLUSH PRIVILEGES执行 FLUSH PRIVILEGES 后,所有活跃连接的权限不会立即刷新,新连接才生效;已有连接仍用旧缓存,直到下次权限检查点MySQL 8.0+ 的缓存结构更复杂,包含角色继承、密码策略等,FLUSH PRIVILEGES 还可能触发额外校验,耗时更长如何验证权限缓存是否生效?看 performance_schema 里的计数器最直接。缓存命中高,说明系统没频繁回表查权限表。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
weixin199701080162 分钟前
《Mercari OTA 直连接入:日本二手电商出海的API通道与600次/分钟限流实战》(附Python源码)瀚高PG实验室30 分钟前
瀚高数据库V9.0.5数据脱敏完整配置步骤半亩码田32 分钟前
【.NET新特性·第17篇】EF Core 10 与 Aspire 13.1zhangzeyuaaa36 分钟前
AI Agent 执行引擎选型指南:PowerShell / Bash 和 Python,边界与最佳实践hacker70739 分钟前
DBeaver 鸿蒙 PC 适配全记录:在 HarmonyOS 桌面端原生重建一个通用数据库工具Cicada12842 分钟前
分享我一直在用的一套 AI 记忆系统方案todoitbo1 小时前
SQL Server数据库迁移:V9R4C019 如何接住存量 T-SQL 批处理泡干脆面就番茄1 小时前
04_EigenFace特征脸PCA人脸识别云飞云共享云桌面1 小时前
不用批量采购工作站|液压设备制造,SolidWorks 多人共享服务器方案今儿敲了吗1 小时前
01词频统计器