重构查询

一、切分查询解决大批量update、delete产生的问题

实际工作中,经常遇到批量insert、delete、update数据库的操作以及对业务频繁的大表添加索引,这种情况下很容易造成一次性锁住很多数据,
占满整个事务日志、耗尽系统资源、阻塞很多小的但是重要的查询。
针对insert不要一次一条的插入,频繁写入数据库,可以修改城一次性插入100、1000条数据。
针对delete、update不要一次性操作全部的数据,可以分批次的操作数据,没有必要查询需要update多少条记录,根据每次操作返回的影响记录数来决定。
以上最好在每次修改之后都sleep一段时间,分摊服务器的压力,当然这种批量操作数据一定要经过严格的测试,对风险点要有认识。
对于增加索引的情况:。。。

二、分解关联查询

便于应用层、mysql缓存层更方遍使用缓存。mysql多表查询,如果其中一个表的数据发生了变化,就没有办法使用到缓存了。
执行单个查询可以避免锁的竞争。
应用层做关联、方便数据库的扩展,如分库分表。
应用层关联,相当于在应用层实现了哈希关联,而不是mysql的嵌套循环关联,这样可以减少数据的重复访问,并且在某些场景下的性能要更好。

四、mysql处理查询的流程

客户端和服务端通信协议:半双工
查询状态:sleep、query、locked、analyzing and statistcis、copying to tmp table [on disk]、sorting result、sending data
posted @ 2018-03-14 11:50  yuanlairlj  阅读(143)  评论(0编辑  收藏  举报