ITPub博客

首页 > 数据库 > MySQL > MySQL 视图(合并多表数据)引发的严重性能问题

MySQL 视图(合并多表数据)引发的严重性能问题

原创 MySQL 作者:DBA_每日记 时间:2019-10-15 16:08:14 0 删除 编辑

问题背景:

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


处理过程:


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


1. SELECT nodename FROM view_name1 WHERE id = xxx;

2. SELECT a.id rid,accounttype,belongto,resourceId,belongtoshow FROM view_name2 a

  LEFT JOIN tablename1 b

    ON a. col1= b.col1

WHERE a.col1> 0 ;


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

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

 

3>通过视图进行查询:


create view t_view as

select * from t001

union all

select * from t002

 

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

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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69950231/viewspace-2660061/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
聚焦人文和技术,分享干货,共同成长

注册时间:2019-10-09

  • 博文量
    177
  • 访问量
    238563