sql 优化的一部分细则1

做一个项目统计的内容,其中 涉及到跨库跨表及表连接 及子查询嵌套,还真的是不是很简单,也意识到了sql 优化对查询性能的对比。
跨库其实有两种思路
1.连接两个数据库【数据源】把查询的数据加载到程序中,比如使用springboot,然后在程序中做一些连接聚合的操作
2.将被连接的另一个库的表的数据dump 来,然后在主库中新建一个临时表,并把刚才dump 的数据插入进去,然后在同库里实现多表连接join 查询,需要注意的是临时表只在当前连接session中可见,connection 断掉 这个临时表就会被删除,所以在一个单独连接中药执行多条sql

然后是表连接,一定要注意的是 left join 还是inner join ,只要匹配的数据就用inner join

另外是子查询,在做子查询的时候一定要应用上现有的索引字段,不然查询性能会非常差,尽量在应用后单表所有索引字段过滤后再join其他表,不然表连接后生成一个新表,所有的索引就失效了对于新表
表连接 会导致 mysql 的磁盘io 猛增,影响到查询效率

如果可以使用 in 尽量使用in 来代替表连接【如果只要一个字段】
sql 在group by 的时候 要对剩下的字段做聚合 sum avg count 等等要利用上

同样的内容,不同的sql 拼写,效率千差万别,对两千万对2百万的联合查询,使用inner join 一个小时没有出结果,使用两步 然后in 的形式5分钟出结果

    原文作者:Helen_Cat
    原文地址: https://www.jianshu.com/p/a5f944739bf1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞