mysql查询执行流程

查询流程:
客户端发送一条查询给服务器;
服务器先检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果;否则,进入下一阶段;
服务器进行SQL解析、预处理,再由优化器生成对应的执行计划;
MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;
将结果返回给客户端;
查询缓存
用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析、优化和执行等阶段;
MySQL保存结果于缓存中,把select语句本身做hash计算,计算的结果作为key,查询结果作为value;
查询语句的大小写会影响缓存的存储和命中,故需保持查询语句的大小写一致性;
何种语句不会被缓存
查询语句中有一些不确定数据时,不会缓存,如now(),current_time()等
若查询中包含用户自定义函数,存储函数,用户变量,临时表,mysql库中系统表,或者任何包含权限的表,一般都不会缓存
缓存会带来额外开销,因为:
读查询在开始之前必须先检查是否命中缓存;
DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。
0
若某个读查询可以被缓存且未被缓存,那么当完成执行后,MySQL会将其结果存入查询缓存;
对写操作也有影响,因为当写入数据时,MySQL必须将对应表的所有缓存都设置失效,这在缓存内存较大时将导致很大的系统消耗;
故查询缓存并非必需,其效率取决于全部查询中开销较大的查询是否能被缓存命中;
缓存相关变量查询

如何判断缓存命中率
缓存命中率相关的变量

计算缓存命中率

缓存优化的思路
批量写入而非多次单个写入;
缓存空间不宜过大,因为大量缓存同时失效会导致服务器假死;
必要时,使用sql_cache和sql_no_cache手动控制缓存;
对写密集型的应用场景来说,禁用缓存反而能提高性能
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号