目录
一、拆分查询
将大查询拆分成小查询,每个查询功能完全一样,只是一小部分,每次只返回一小部分查询结果。
比如在删除旧数据的时候,如果用一个大的语句一次性删的话,则可能需要一次性锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞其它查询任务。如果将一个大的删除语句拆分成若干个较小的删除语句,可以提升MySQL的性能。一次删除一万行数据一般来说是一个比较高效并且对服务器影响最小的做法。
二、分解关联查询
分解关联查询的优势
- 让缓存更高效,如果某个表改变了,就无法使用查询缓存了,而拆分后,如果其它表没变化,那么基于这些表的查询就可以使用缓存结果了;
- 将查询分解后,执行单表查询时可以减少锁的竞争;
- 在应用层做关联,可以更容易对数据进行拆分,更容易做到高性能和高扩展;
- 查询本身的效率也可能会提升;
- 可以减少冗余记录的查询
三、查询的执行过程
- 客户端发送一条查询语句到服务器
- 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据;
- 未命中缓存后,MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树,MySQL解析器将使用MySQL语法进行验证和解析。例如,验证是否使用了错误的关键字,或者关键字的使用是否正确;
- 预处理是根据一些MySQL规则检查解析树是否合理,比如检查表和列是否存在,还会解析名字和别名,然后预处理器会验证权限;
- 根据
本文介绍了MySQL查询的执行过程,从拆分查询、分解关联查询到查询优化器的策略,如重新定义关联表顺序、使用覆盖索引扫描等。还探讨了MySQL如何执行关联查询和查询执行引擎的工作原理,以及分页查询的优化方法。
订阅专栏 解锁全文
4369

被折叠的 条评论
为什么被折叠?



