首页 > 数据库 >mysql 优化select or set记录

mysql 优化select or set记录

时间:2023-01-12 08:56:47浏览次数:34  
标签:set UNION 202301 emtc select mysql WHERE SELECT voltage

1  原始sql 

SELECT * FROM st_voltage_r_202301 
    WHERE emtc IN (SELECT emtc FROM sw_statistics_info WHERE manufacturer_name = '中电科27所')  or   emtc  in ('0112320021', '0112320041', '0203230011', '0203230031', '0382120021' );

  需要2.9秒

  explain SELECT * FROM st_voltage_r_202301 
    WHERE   emtc  in ('0112320021', '0112320041', '0203230011', '0203230031', '0382120021' );


    explain SELECT * FROM st_voltage_r_202301 
    WHERE emtc IN (SELECT emtc FROM sw_statistics_info WHERE manufacturer_name = '中电科27所')  ;

单独查询都只需要0.2秒

 

说明肯定优化的

方案1: 将查询结果都放临时表中

CREATE TEMPORARY TABLE temp_emtc(emtc VARCHAR(20));
INSERT INTO temp_emtc VALUES ('0112320021'), ('0112320041'), ('0203230011'), ('0203230031'), ('0382120021');

INSERT INTO temp_emtc  SELECT emtc FROM sw_statistics_info WHERE manufacturer_name = '中电科27所'


SELECT * FROM st_voltage_r_202301 
    WHERE emtc IN (SELECT emtc FROM temp_emtc );

查询结果0.2秒

方案 2:  不适用or条件,适用union all或者union

SELECT * FROM st_voltage_r_202301 
WHERE emtc IN (SELECT emtc FROM (SELECT emtc FROM sw_statistics_info WHERE manufacturer_name = '中电科27所'
    UNION ALL 
    SELECT '0112320021'
    UNION ALL 
    SELECT '0112320041' 
    UNION ALL 
    SELECT '0203230011' 
    UNION ALL 
    SELECT '0203230031'
    UNION ALL 
    SELECT '0382120021') as subquery);

  0.2秒 , 这样变成了只查索引数据,不会全表扫描

 

标签:set,UNION,202301,emtc,select,mysql,WHERE,SELECT,voltage
From: https://www.cnblogs.com/chengxin1982/p/17045412.html

相关文章

  • 系统性能排查方略及大型银行MySQL性能管控
    分享概要一、系统性能问题五大特性二、系统性能排查方略三、MySQL开发规范和常见调优策略四、MySQL性能管控体系五、未来展望 一、系统性能问......
  • RHEL9手动安装MySQL5.7.8
    手动安装便于后期维护,并且更加通用本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正新建MySQL目录mkdir/app/mysql5.7.8#主程序目录mkdir/data/mysql#数......
  • mysql
    mysqlMySQL上篇:基础篇】【第1子篇:数据库概述与MySQL安装篇】p01-p11学习建议:零基础同学必看,涉及理解和Windows系统下MySQL安装【第2子篇:SQL之SELECT使用篇】p12-p48......
  • MySQL配置安装或界面手动安装总结
    MySQL8安装避坑问题一:按照免安装版安装   1.链接官网:https://dev.mysql.com/downloads/mysql/  2.MySQL8目录      以管理员权限进入cmd  3.......
  • MySql学习笔记-进阶03
          ......
  • python+mysql—高效的数据处理方案
    python+mysql——高效的数据处理方式使用场景大规模数据处理;多个任务可以并发执行;需要保存结果;为实现以上三个要求,就需要充分利用服务器中的多核资源,让程序高效并发执......
  • ES6-Set
    一。怎么用:1.和数组比较,数组是一系列有序的数据集合,Set是无序、没有重复值的数据集合2.数组的创建有两种字面量和newArray(1,2,3),set只能通过newSet()创建set实例;格式是{数据......
  • MySQL_2_正则表达式、自动增长、事务、索引
    一、正则表达式在SQL中使用正则表达式对字段进行筛选,比like性能高,使用关键字regexp即可。正则表达式格式:select要投影的字段from表名where列名regexp'正则......
  • 008statefulset的pvc命名规则
    有状态服务的存储状态下面我们来继续探究StatefulSet对存储状态的管理机制,在前面我们创建Pod需要使用存储的时候,只需要在资源文件中添加spec.volumes字段声明使用volume就......
  • Mysql页分裂
     当我们向某个索引对应的B+树插入记录,需要先定位到这条记录应该被插入到哪个叶子节点对应的数据页中,确定之后有两种情况:①该页恰好空间足够,能直接插入数据②该页空间不......