美文网首页
sql视图导致sql变慢(准确来说是派生表问题)

sql视图导致sql变慢(准确来说是派生表问题)

作者: TDominator | 来源:发表于2020-04-13 17:48 被阅读0次

最近有个业务有点小变动,列表展示需要加上Customer消费笔数跟最后消费时间;
从视图copy下来的sql

SELECT `uprecord`.`SHOP` AS `SHOP`, `uprecord`.`SHOP_NAME` AS `SHOP_NAME`, `uprecord`.`SAREA` AS `SAREA`, `uprecord`.`SAREA_NAME` AS `SAREA_NAME`, `uprecord`.`TEL` AS `TEL`
    , `uprecord`.`VIPID` AS `VIPID`, `uprecord`.`NAME` AS `NAME`, `uprecord`.`CARD_NO` AS `CARD_NO`, `uprecord`.`OLD_LEVEL` AS `OLD_LEVEL`, `uprecord`.`OLD_LEVEL_NAME` AS `OLD_LEVEL_NAME`
    , `uprecord`.`NEW_LEVEL` AS `NEW_LEVEL`, `uprecord`.`NEW_LEVEL_NAME` AS `NEW_LEVEL_NAME`, `uprecord`.`IFMEET` AS `IFMEET`, `uprecord`.`IFMEET_NAME` AS `IFMEET_NAME`, `uprecord`.`REMARK` AS `REMARK`
    , `uprecord`.`ID_` AS `ID_`, `uprecord`.`REF_ID_` AS `REF_ID_`, `uprecord`.`PARENT_ID_` AS `PARENT_ID_`, `uprecord`.`INST_ID_` AS `INST_ID_`, `uprecord`.`INST_STATUS_` AS `INST_STATUS_`
    , `uprecord`.`TENANT_ID_` AS `TENANT_ID_`, `uprecord`.`CREATE_TIME_` AS `CREATE_TIME_`, `uprecord`.`CREATE_BY_` AS `CREATE_BY_`, `uprecord`.`UPDATE_BY_` AS `UPDATE_BY_`, `uprecord`.`UPDATE_TIME_` AS `UPDATE_TIME_`
    , `uprecord`.`GROUP_ID_` AS `GROUP_ID_`, `uprecord`.`STATUS` AS `STATUS`, `uprecord`.`STATUS_NAME` AS `STATUS_NAME`, '消费记录' AS `XFJL`
    , ifnull(`points`.`thisamount`, 0) AS `thisamount`
    , ifnull(`points`.`use_thispoints`, 0) AS `use_thispoints`
    , (
        SELECT COUNT(0)
        FROM `crmp_vip_salerecord`
        WHERE year(`crmp_vip_salerecord`.`sDate`) = year(now())
            AND `crmp_vip_salerecord`.`card_no` = `uprecord`.`CARD_NO`
    ) AS `consumption`
    , (
        SELECT `crmp_vip_salerecord`.`sDate`
        FROM `crmp_vip_salerecord`
        WHERE `crmp_vip_salerecord`.`vipid` = `uprecord`.`VIPID`
        ORDER BY `crmp_vip_salerecord`.`sDate` DESC
        LIMIT 0, 1
    ) AS `lastTime`
FROM `crmp_vip_uprecord` `uprecord`
    LEFT JOIN `crmp_vip_points` `points` ON `points`.`vipid` = `uprecord`.`VIPID`
ORDER BY `uprecord`.`CREATE_TIME_`

运行sql是毫秒级别!

image.png
把他创建成视图之后的速度
image.png
整个人蒙蔽的状态,满脑子小朋友你是否有很多❓❓❓
用explain查看了下
image.png
除了 uprecord 没走索引(有同学就会问了为啥没走索引https://blog.csdn.net/qq_20009015/article/details/91405186
这个文章已经解释了,这不是本文章的重点。)其他都走了索引,整个人又是❓❓❓
然后又查看了下视图
image.png
出现了一个奇怪的表<derived2>,没错这个就是派生表;
派生表:Microsoft公司新推出的SQL2005数据库的一个增强功能。它将子查询做为一个表来处理,这个由子查询得出的新表就是我们说的“派生表”。

生成:比如要查找一个叫张铁牛的人的信息,我们知道他是男性,为了缩小查找范围我把所有的男性都找出来,然后从这些男性中里面再去找张铁牛。这里男性的集合就相当于派生表,转成sql语句是这样:select 姓名,住址,身份证 from (select * from 表名 where 性别='男性') t where 姓名='张铁牛'

创建视图不过就是把你CREATE VIEW view_name as后的语句包裹起来了 也就是 select * from()view_name ,而上面这段sql在不布包裹的情况下是不会产生派生表的,一旦包裹起来了在 image.png

这两条子查询的情况下就会产生派生表了;证明如下:


image.png

问题是找到了,可怎么在sql优化又是一个难题(默认是全部不加where条件);暂时考虑后期在表上做冗余数据,😅ahhhhh~~~先把功能上上去。

如果有描述不对的地方请大声的告诉作者你你你这这这错了!,如果有sql优化方案也可以在下方积极评论哦;

相关文章

  • sql视图导致sql变慢(准确来说是派生表问题)

    最近有个业务有点小变动,列表展示需要加上Customer消费笔数跟最后消费时间;从视图copy下来的sql 运行s...

  • SQL优化很难怎么办?给你一个简单暴力的办法

    今天给大家带来一个比较简单SQL优化案例,来分析一下开发人员经常感到不解一个问题——视图合并导致的SQL变慢 例如...

  • SQL中的视图

    在SQL 中,视图是基于SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个真实的表。 视图中的字段就是来...

  • 数据库基础知识整理-SQL视图

    数据库基础知识整理-SQL视图 视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和...

  • SQL视图

    SQL 视图(Views)视图是可视化的表。 讲解如何创建、更新和删除视图。 SQL CREATE VIEW 语句...

  • 视图

    SQL CREATE VIEW 语句 什么是视图?在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视...

  • 数据库基础07视图、约束、索引

    视图 视图的概念 视图的概念——虚表,本质就是查询的SQL 视图的作用 视图的作用——用来存储我们的SQL 视图的...

  • Mysql必知必会笔记——下

    操作表 视图 视图是虚拟的表。使用视图可以重用SQL语句,简化复杂的SQL操作,更改数据格式和表示等;创建视图后可...

  • SQL操作指南四(复杂查询)

    视图 视图和表从SQL的角度看视图其实就是一张表,在SQL语句中并不需要区分哪些是表,哪些是视图。视图和表的唯一区...

  • SQL 简易教程 下

    SQL 视图(Views) 视图是可视化的表。 本章讲解如何创建、更新和删除视图。 在 SQL 中,视图是基于 S...

网友评论

      本文标题:sql视图导致sql变慢(准确来说是派生表问题)

      本文链接:https://www.haomeiwen.com/subject/jvxnmhtx.html