zoukankan      html  css  js  c++  java
  • MySQL 视图(合并多表数据)引发的严重性能问题

    问题背景:

    一、客户环境连续多次出现性能问题,系统登入异常,数据库CPU告警。

    处理过程:

    1>协助排查数据库性能问题时发现如下两个较频繁的SQL导致严重的性能问题(均使用了视图合并多表数据):

    复制代码
    1 1. SELECT nodename FROM view_name1 WHERE id = xxx;
    2 
    3 2. SELECT a.id rid,accounttype,belongto,resourceId,belongtoshow FROM view_name2 a
    4   LEFT JOIN tablename1 b
    5     ON a. col1= b.col1
    6 WHERE a.col1> 0 ;
    复制代码

    2> 上面两个SQL使用到了视图(视图通过union all合并了两张表的数据)。下面以t001和t002为例分别给出直接查询原表和使用视图查询的执行计划对比

    (其中t001和t002表中id列均有索引):直接查询原表后对结果进行合并:

     

    3>通过视图进行查询:

    1 create view t_view as
    2 select * from t001
    3 union all
    4 select * from t002

     

    4> 对比执行计划可以发现,使用视图进行数据union all会导致索引失效,使用了全表扫描的方式进行数据检索,在并发高的情况下,

    占用较多的磁盘IO,严重消耗数据库的CPU和IO资源,影响到整体的数据库性能,现阶段已发现较多的这种使用视图的代码,应避免使用视图,采用分开查询各表的方式。

    ————————————————

    聚焦技术与人文,分享干货,共同成长更多内容请关注“数据与人”

  • 相关阅读:
    C# 二维数组 排列组合
    highcharts(数据可视化框架),ajax传递数据问题
    EasyPoi导入验证功能
    EasyPoi使用入门
    SSJ(Spring+springMVC+JPA)设置xml文件思路流程
    spring框架设置jdbc
    使用JDBC完成CRUD(增删改查)
    Java的数据类型(常量,变量)
    jdk8的安装与卸载
    Java的第一个你好世界
  • 原文地址:https://www.cnblogs.com/shujuyr/p/13080979.html
Copyright © 2011-2022 走看看