0

0

mysql SQL执行流程是什么_mysql执行过程解析

P粉602998670

P粉602998670

发布时间:2026-02-11 10:46:03

|

438人浏览过

|

来源于php中文网

原创

连接器先校验身份再查权限表,按user→db→tables_priv→columns_priv逐级检查;解析器阶段报错说明语句未通过词法和语法分析;优化器基于成本估算选索引,FORCE INDEX非绝对生效;MySQL 8.0已彻底移除查询缓存。

mysql sql执行流程是什么_mysql执行过程解析

连接器先校验身份,再查权限表

你执行 mysql -u root -p 后输入密码,连接器干的不是“连上就完事”,而是立刻查 mysql.user 表确认账号是否存在、密码哈希是否匹配;通过后,再按 user → db → tables_priv → columns_priv 顺序逐级查权限。哪怕你只查一张表的某个字段,只要 columns_priv 里没开对应列的 SELECT 权限,就会报 ERROR 1142 (42000): SELECT command denied to user,而不是语法错误。

常见踩坑点:

  • SHOW PROCESSLIST 能看到当前所有连接的 IdUser,但看不到具体权限——权限是会话级缓存的,改了 mysql 库的权限表后,必须执行 FLUSH PRIVILEGES 或让客户端重连才生效
  • wait_timeout 默认 8 小时,长连接空闲太久会被自动断开,应用层若没做重连逻辑,就会突然报 MySQL server has gone away
  • 权限验证失败时,错误信息里带 @'host'(比如 'root'@'192.168.1.100'),说明 MySQL 是按「用户名+来源 IP」组合鉴权的,不是单看用户名

解析器报错 = 语句根本没进优化器

当你写错 SELECT * FROM users WHERE id = 123;SELCT * FROM users WHERE id = 123;,或者查一个不存在的列 SELECT phone FROM users;,错误发生在解析器阶段——它做完词法分析(拆出关键字、标识符)和语法分析(检查结构是否符合 SELECT ... FROM ... WHERE ... 规则)后直接报错,根本不会走到优化器或执行器。

这意味着:

  • EXPLAIN 对这种语句无效,执行就报错,没法看执行计划
  • 语法检查顺序严格:SELECT → FROM → JOIN → ON → WHERE → GROUP BY → HAVING → UNION → ORDER BY → LIMIT,漏写 FROM 或把 WHERE 写在 GROUP BY 前面,都会被解析器拦下
  • 大小写和空格敏感:在 MySQL 5.7 及以前,select * from tSELECT * FROM t 是两个不同缓存 key(虽然 8.0 已删缓存,但解析器仍按字面值比对)

优化器选索引不认你写的 FORCE INDEX?正常

你加了 FORCE INDEX (idx_created_at),但 EXPLAIN 显示还是走全表扫描?不是 MySQL 忽略你,而是优化器在 ANALYZE TABLE 统计信息基础上做了成本估算:如果 created_at 索引选择性差(比如只有 3 个不同值)、表又小(Rows 显示才几百行),它判断走索引回表反而比直接扫更快。

Hypotenuse AI
Hypotenuse AI

AI写作助手和文本生成器,根据关键词生成原创的、有洞察力的文章

下载

实操建议:

  • SHOW TABLE STATUS LIKE 'orders'RowsData_length,再用 SELECT COUNT(DISTINCT status) / COUNT(*) FROM orders 算选择性,低于 0.01 就别指望它用这个字段索引
  • FORCE INDEX 是绕过优化器的“硬指令”,但数据量突增后可能从加速变拖慢,线上慎用
  • 真正可控的是建好复合索引:比如 WHERE status = ? ORDER BY created_at DESC,优先建 (status, created_at) 而非单列索引

MySQL 8.0 起,查询缓存已彻底消失

别再查 query_cache_size 或设 query_cache_type = 1——MySQL 8.0 把整个查询缓存模块(包括内存管理、失效逻辑、所有相关变量)全删了。你升级到 8.0 后如果还依赖缓存,要么换应用层缓存(Redis),要么靠 InnoDB 缓冲池(innodb_buffer_pool_size)扛热数据。

为什么删?因为:

  • 缓存 key 是 SQL 字符串全匹配,SELECT * FROM tSELECT * FROM t(多两个空格)就是两个缓存项
  • 一张表任何 INSERT/UPDATE/DELETE,所有涉及该表的缓存全部失效,写多读少场景下命中率趋近于 0
  • 多线程争抢缓存锁,高并发时反而成为瓶颈

现在真正的“缓存”只剩两层:InnoDB 的数据页缓存(由 innodb_buffer_pool_size 控制),和操作系统的 page cache——它们不认 SQL,只认磁盘块,更底层也更稳定。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

900

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

333

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

372

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1550

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

368

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1108

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

583

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

433

2024.04.29

Rust异步编程与Tokio运行时实战
Rust异步编程与Tokio运行时实战

本专题聚焦 Rust 语言的异步编程模型,深入讲解 async/await 机制与 Tokio 运行时的核心原理。内容包括异步任务调度、Future 执行模型、并发安全、网络 IO 编程以及高并发场景下的性能优化。通过实战示例,帮助开发者使用 Rust 构建高性能、低延迟的后端服务与网络应用。

1

2026.02.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 828人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号