目录
一、拆分查询
将大查询拆分成小查询,每个查询功能完全一样,只是一小部分,每次只返回一小部分查询结果。
比如在删除旧数据的时候,如果用一个大的语句一次性删的话,则可能需要一次性锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞其它查询任务。如果将一个大的删除语句拆分成若干个较小的删除语句,可以提升MySQL的性能。一次删除一万行数据一般来说是一个比较高效并且对服务器影响最小的做法。
二、分解关联查询
分解关联查询的优势
- 让缓存更高效,如果某个表改变了,就无法使用查询缓存了,而拆分后,如果其它表没变化,那么基于这些表的查询就可以使用缓存结果了;
- 将查询分解后,执行单表查询时可以减少锁的竞争;
- 在应用层做关联,可以更容易对数据进行拆分,更容易做到高性能和高扩展;
- 查询本身的效率也可能会提升;
- 可以减少冗余记录的查询
三、查询的执行过程
- 客户端发送一条查询语句到服务器
- 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据;
- 未命中缓存后,MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树,MySQL解析