增加强制索引依然慢

news2024/11/18 23:42:26

版本: 阿里云RDS MySQL 8.0.25

线上数据库CPU达到100%, 定位到如下SQL

EXPLAIN 
SELECT 
    ssd.goods_no,
            ssd.goods_name,
            ssd.goods_spec,
            ssd.goods_unit,
            ssd.create_time,
            w.warehouse_name,
            sb.batch_no,
            swl.warehouse_region_location_name,
            sc.customer_name AS goodsOwnerName,
            sc2.customer_name AS supplierName,
            ss.storage_id,
            ss.storage_no,
            ss.storage_desc,
            sbdl.storage_type,
            sbdl.create_time AS finishTime,
            sbdl.before_quantity,
            sbdl.quantity AS real_quantity,
            sbdl.after_quantity,
            sc3.customer_name,
            sbdl.storage_category,
            sb.warehouse_owner_goods_id,
            sb.goods_owner_id
FROM 
    store_batch_details_log sbdl 
    INNER JOIN store_storage_details ssd ON ssd.storage_details_id = sbdl.storage_details_id
    INNER JOIN store_storage ss  ON ss.storage_id = ssd.storage_id
    INNER JOIN store_batch_details sbd ON sbd.batch_details_id = sbdl.batch_details_id
    INNER JOIN store_batch sb ON sb.batch_id = sbd.batch_id 
    LEFT JOIN store_warehouse_location swl ON swl.warehouse_location_id = sbd.warehouse_location_id
    LEFT JOIN store_customer sc ON sc.customer_id = sb.goods_owner_id
    LEFT JOIN store_customer sc3 ON sc3.customer_id = ss.customer_id
    LEFT JOIN warehouse w ON w.warehouse_id = ssd.warehouse_id
    LEFT JOIN store_customer sc2 ON sc2.customer_id = sb.supplier_id
WHERE 
    1 = 1
        AND ssd.`goods_name` LIKE CONCAT('%', '【堂食专供】葡萄(计重)', '%')
        AND ss.enterprise_id = 241240455403319296
        AND ss.warehouse_id IN (272697524450807808 , 278854886203117568,
        358283733083942912,
        358310610389495808,
        358316852142993408,
        358317205127229440,
        358317497189199872,
        358319149438791680,
        358320040363487232,
        362996967464562688,
        362998068574220288,
        372377440368259072,
        372377840450334720,
        375321342717001728,
        377847160517230592,
        382166980817661952,
        382167317834182656,
        383586763626799104,
        392392204255334400,
        395668297183764480,
        395668683634352128,
        416633733303848960,
        427869257024753664,
        432595648538574848,
        433271921665474560,
        433660539047346176,
        434765698913632256,
        460080655901245440)
        ORDER BY ss.create_time DESC
        LIMIT 0,20 ;
        

执行计划如下
在这里插入图片描述

ss表全表扫描

因为在 ss 表上存在索引 idx_enterprise_id_warehouse_id_create_time , 既然没有使用索引, 与查询的条件有关. 于是条件上删除了一些仓库, SQL如下



EXPLAIN 
SELECT 
    ssd.goods_no,
            ssd.goods_name,
            ssd.goods_spec,
            ssd.goods_unit,
            ssd.create_time,
            w.warehouse_name,
            sb.batch_no,
            swl.warehouse_region_location_name,
            sc.customer_name AS goodsOwnerName,
            sc2.customer_name AS supplierName,
            ss.storage_id,
            ss.storage_no,
            ss.storage_desc,
            sbdl.storage_type,
            sbdl.create_time AS finishTime,
            sbdl.before_quantity,
            sbdl.quantity AS real_quantity,
            sbdl.after_quantity,
            sc3.customer_name,
            sbdl.storage_category,
            sb.warehouse_owner_goods_id,
            sb.goods_owner_id
FROM 
    store_batch_details_log sbdl 
        INNER JOIN
    store_storage_details ssd ON ssd.storage_details_id = sbdl.storage_details_id
        INNER JOIN
    store_storage ss  ON ss.storage_id = ssd.storage_id
        INNER JOIN 
    store_batch_details sbd ON sbd.batch_details_id = sbdl.batch_details_id
        INNER JOIN 
    store_batch sb ON sb.batch_id = sbd.batch_id 
            LEFT JOIN store_warehouse_location swl ON swl.warehouse_location_id = sbd.warehouse_location_id
        LEFT JOIN store_customer sc ON sc.customer_id = sb.goods_owner_id
        LEFT JOIN store_customer sc3 ON sc3.customer_id = ss.customer_id
        LEFT JOIN warehouse w ON w.warehouse_id = ssd.warehouse_id
        LEFT JOIN store_customer sc2 ON sc2.customer_id = sb.supplier_id
WHERE 
    1 = 1
        AND ssd.`goods_name` LIKE CONCAT('%', '【堂食专供】葡萄(计重)', '%')
        AND ss.enterprise_id = 241240455403319296
        AND ss.warehouse_id IN (272697524450807808 , 278854886203117568,
        358283733083942912,
        358310610389495808,
        358316852142993408,
        358317205127229440,
        358317497189199872,
        358319149438791680,
        358320040363487232,
        362996967464562688,
        432595648538574848,
        433271921665474560,
        433660539047346176,
        434765698913632256,
        460080655901245440)
        ORDER BY ss.create_time DESC
        LIMIT 0,20 ;
        

执行计划如下

在这里插入图片描述ss表使用了索引, row值也变少了 .

于是第一步的优化, 针对第一个原始的SQL, 采用了强制索引


EXPLAIN 
SELECT 
    ssd.goods_no,
            ssd.goods_name,
            ssd.goods_spec,
            ssd.goods_unit,
            ssd.create_time,
            w.warehouse_name,
            sb.batch_no,
            swl.warehouse_region_location_name,
            sc.customer_name AS goodsOwnerName,
            sc2.customer_name AS supplierName,
            ss.storage_id,
            ss.storage_no,
            ss.storage_desc,
            sbdl.storage_type,
            sbdl.create_time AS finishTime,
            sbdl.before_quantity,
            sbdl.quantity AS real_quantity,
            sbdl.after_quantity,
            sc3.customer_name,
            sbdl.storage_category,
            sb.warehouse_owner_goods_id,
            sb.goods_owner_id
FROM 
    store_batch_details_log sbdl 
    INNER JOIN store_storage_details ssd ON ssd.storage_details_id = sbdl.storage_details_id
    INNER JOIN store_storage ss force index(idx_enterprise_id_warehouse_id_create_time) ON ss.storage_id = ssd.storage_id
    INNER JOIN store_batch_details sbd ON sbd.batch_details_id = sbdl.batch_details_id
    INNER JOIN store_batch sb ON sb.batch_id = sbd.batch_id 
    LEFT JOIN store_warehouse_location swl ON swl.warehouse_location_id = sbd.warehouse_location_id
    LEFT JOIN store_customer sc ON sc.customer_id = sb.goods_owner_id
    LEFT JOIN store_customer sc3 ON sc3.customer_id = ss.customer_id
    LEFT JOIN warehouse w ON w.warehouse_id = ssd.warehouse_id
    LEFT JOIN store_customer sc2 ON sc2.customer_id = sb.supplier_id
WHERE 
    1 = 1
        AND ssd.`goods_name` LIKE CONCAT('%', '【堂食专供】葡萄(计重)', '%')
        AND ss.enterprise_id = 241240455403319296
        AND ss.warehouse_id IN (272697524450807808 , 278854886203117568,
        358283733083942912,
        358310610389495808,
        358316852142993408,
        358317205127229440,
        358317497189199872,
        358319149438791680,
        358320040363487232,
        362996967464562688,
        362998068574220288,
        372377440368259072,
        372377840450334720,
        375321342717001728,
        377847160517230592,
        382166980817661952,
        382167317834182656,
        383586763626799104,
        392392204255334400,
        395668297183764480,
        395668683634352128,
        416633733303848960,
        427869257024753664,
        432595648538574848,
        433271921665474560,
        433660539047346176,
        434765698913632256,
        460080655901245440)
        ORDER BY ss.create_time DESC
        LIMIT 0,20 ;
        

如上, 使用了 force index(idx_enterprise_id_warehouse_id_create_time) . 执行计划如下

在这里插入图片描述ss表终于使用了索引, row值也变少了 . 可在实际执行SQL语句时, 耗时14左右, 依然不理想.

继续使用 SHOW PROFILE查看具体的资源消耗使用情况

在这里插入图片描述

待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1799347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析必备:一步步教你如何用Pandas做数据分析(19)

1、Pandas 日期函数 Pandas 日期函数操作实例 扩展时间序列,日期功能在财务数据分析中起着重要作用。使用日期数据时,我们经常会遇到以下情况- 生成日期序列 将日期序列转换为不同的频率 2、创建日期范围 通过指定日期和频率使用date.range()函数&…

Redis高频面试基本问题整理

文章目录 1、Redis底层协议2、Redis的热Key问题如何解决3、Redis是单线程还是多线程4、 什么是脑裂问题?5、redis集群会有写操作丢失吗?6、什么是 Redis 的 Pipeline?它有哪些优点?7、redis主从复制、哨兵机制、集群的理解8、缓存…

ssh远程转发22端口,使用shell工具进行连接|使用服务器地址ssh连接本地ubuntu|端口映射

☆ 问题描述 我在内网主机中,使用docker创建了多个虚拟机,我希望能通过我的公网ip服务器端口进行shell访问 ★ 解决方案 我创建一个新的虚拟机为例 1. 创建并打开容器 docker run -itd --name test ubuntu2. 进入容器 docker exec -it test /bin/b…

Rocky Linux安装与基础配置

目录 背景与起源 主要特点 目标用户 发展前景 下载 安装 常用配置命令: 更换镜像源 Rocky Linux 是一个开源的、由社区驱动的操作系统,旨在使用 Red Hat Enterprise Linux(RHEL)源码构建的下游二进制兼容发行版。以下是关于…

[word] word冻结单元格在哪里 #微信#笔记#职场发展

word冻结单元格在哪里 我们在制作一个Excel表格的时候,如果行数较多,列数也较多时,一旦向下滚屏,则上面的标题行也跟着滚动,在处理数据时往往难以分清各列数据对应于表头的标题,容易搞错位置。 其实&…

全程自动化操作 自动生成图文发布,矩阵批量软件系统 日产1-3万篇

一、简介 图文发布对于现代网站运营至关重要,然而手动创建和发布图文内容效率低下且易出错。全自动化图文生成发布流程可以解决这个问题。本文将详细说明如何以编程方式实现这一流程。 二、模块设计 该流程主要包含三个模块:图像生成,文本生成…

Android中打印某应用的堆栈信息

先更具报名获取pid adb shell "ps|grep 包名" zygote的堆栈dump 实际上这个可以同时dump java线程及native线程的堆栈&#xff0c;对于java线程&#xff0c;java堆栈和native堆栈都可以得到。 kill -3 <pid> debuggerd的堆栈dump debuggerd是android的一个…

网络安全实验BUAA-全套实验报告打包

下面是部分BUAA网络安全实验✅的实验内容 &#xff1a; 认识路由器、交换机。掌握路由器配置的基本指令。掌握正确配置路由器的方法&#xff0c;使网络正常工作。 本博客包括网络安全课程所有的实验报告&#xff1a;内容详细&#xff0c;一次下载打包 实验1-路由器配置实验2-AP…

5 分钟内构建一个简单的基于 Python 的 GAN

文章目录 一、说明二、代码三、训练四、后记 一、说明 生成对抗网络&#xff08;GAN&#xff09;因其能力而在学术界引起轩然大波。机器能够创作出新颖、富有灵感的作品&#xff0c;这让每个人都感到敬畏和恐惧。因此&#xff0c;人们开始好奇&#xff0c;如何构建一个这样的网…

社区服务支持

社区服务支持 原创 小王搬运工 时序课堂 2024-06-07 19:29 四川 &#x1f31f; 邀请函 | 加入我们的时序数据挖掘社区 &#x1f680; 尊敬的数据爱好者们&#xff0c; 我们诚挚地邀请您加入我们的专业社区——时序数据挖掘社区&#xff0c;一个专注于时序数据分析、挖掘与应…

安装Android Studio报错unable to access android sdk add-on list的解决方案

1. 安装报错 初次安装Android Studio时&#xff0c;提示报错如下&#xff1a; unable to access android sdk add-on lis2. 报错原因 安装Android Studio时&#xff0c;会在默认路径下检测是否有Android SDK&#xff0c;如果没有的话&#xff0c;就会报上述错误。 3. 解决方…

【STL源码剖析】priority_queue 优先队列的简单实现

水到绝处是风景 人到绝境是重生 目录 priority_queue的模拟实现 源码剖析&#xff1a; 代码测试&#xff1a; 契子✨ 我们之前不仅讲过 队列queue 还有 双端队列deque 而我们今天所讲的依旧是队列家族的成员 -- 优先队列priority_queue 顾名思义&#xff0c;priority_queue是…

【Linux】进程2——管理概念,进程概念

1.什么是管理&#xff1f; 那在还没有学习进程之前&#xff0c;就问大家&#xff0c;操作系统是怎么管理进行进程管理的呢&#xff1f; 很简单&#xff0c;先把进程描述起来&#xff0c;再把进程组织起来&#xff01; 我们拿大学为例子 最典型的管理者——校长最典型的被管理…

在keil5中打开keil4工程的方法

文章目录 1. 打开文件 2. 安装旧版本包 3. 在keil4中打开keil5工程 1. 打开文件 在keil5 MDK的环境下&#xff0c;打开keil4的工程文件&#xff0c;会弹出下图所示的窗口&#xff1a; 参考官网的解释这两个方法分别为&#xff1a; 1. 使用MDK 版本 4 Legacy Pack时&#x…

Vue08-数据代理

一、Object.defineProperty() Object.defineProperty() 是 JavaScript 中的一个方法&#xff0c;用于直接在一个对象上定义一个新属性&#xff0c;或者修改一个对象的现有属性&#xff0c;并返回这个对象。 这个方法允许你精确地控制一个对象的属性&#xff0c;包括它的值、是…

2048小游戏的菜鸡实现方法

# 2048小游戏的实现与分析 2048是一款非常受欢迎的数字滑块游戏&#xff0c;其目标是通过滑动和合并相同数字的方块来创建一个值为2048的方块。下面&#xff0c;我们将通过分析一个C语言实现的2048小游戏的源代码&#xff0c;来探索如何用编程实现这款游戏。 ## 游戏概述 20…

Day12:rem 布局 和 less 使用

目标&#xff1a;使用 rem 和 less 完成移动端的布局。 一、移动 Web 基础 1、谷歌模拟器 在网页右键点“检查”或快捷键 F12&#xff0c;然后右边栏顶部第二个按钮切换设备为移动端&#xff0c;刷新网页&#xff0c;可以看到谷歌模拟器&#xff0c;可以切换模拟器型号、尺寸…

Vue3_上传文件_下载文件

目录 一、上传文件 二、下载文件 vue3对接后端进行文件上传和下载。 一、上传文件 点击上传资料按钮&#xff0c;选择文件&#xff0c;进行上传。 创建一个proFile.vue&#xff0c;文件&#xff0c;这个文件可以作为一个子组件在其他页面引用。 组件用的element-Plus的ElM…

端午假期来临,来使用闪侠惠递便宜寄快递吧!

相信很多人和我一样&#xff0c;每当需要寄快递时&#xff0c;总是感到十分头疼。不同的快递公司有不同的价格、时效和服务质量等等&#xff0c;选择起来真的很不容易。但是现在有了闪侠惠递来帮大家寄快递吧&#xff0c;这个问题就可以迎刃而解了&#xff01;小编奉劝大家快来…

NSSCTF CRYPTO MISC题解(一)

陇剑杯 2021刷题记录_[陇剑杯 2021]签到-CSDN博客 [陇剑杯 2021]签到 下载附件压缩包&#xff0c;解压后得到 后缀为.pcpang&#xff0c;为流量包&#xff0c;流量分析&#xff0c;使用wireshark打开 {NSSCTF} [陇剑杯 2021]签到 详解-CSDN博客 选择统计里面的协议分级 发现流…