=======================================================================

SQL语句:

SELECT wave_no,
SUM(IF(picking_qty IS NULL, 0, picking_qty)) AS PICKED_QTY,
SUM(IF(differ_qty IS NULL, 0, differ_qty)) AS PICKED_DIFFER_QTY,
SUM(IF(relocate_qty IS NULL, 0, relocate_qty)) AS PICKED_RELOCATE_QTY FROM picking_locate_d
WHERE yn = 0
AND wave_no IN
(
'BC76361213164811',
'BC76361213164810',
'BC76361213154684',
'BC76361213155125'
)
AND org_No= '661'
AND distribute_No = '763'
AND warehouse_No = '612'
GROUP BY wave_no;

执行计划:

+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+-------+----------+------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+-------+----------+------------------------------------+
| 1 | SIMPLE | picking_locate_d | NULL | range | idx_wave_no | idx_wave_no | 153 | NULL | 16000 | 0.10 | Using index condition; Using where |
+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+-------+----------+------------------------------------+

执行计划JOSN:

EXPLAIN: {
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "9548371.80"
},
"grouping_operation": {
"using_filesort": false,
"table": {
"table_name": "picking_locate_d",
"access_type": "index",
"possible_keys": [
"idx_wave_no"
],
"key": "idx_wave_no",
"used_key_parts": [
"wave_no"
],
"key_length": "153",
"rows_examined_per_scan": 37518548,
"rows_produced_per_join": 1875,
"filtered": "0.01",
"cost_info": {
"read_cost": "9547996.61",
"eval_cost": "375.19",
"prefix_cost": "9548371.80",
"data_read_per_join": "11M"
},
"used_columns": [
"id",
"wave_no",
"picking_qty",
"differ_qty",
"relocate_qty",
"org_no",
"distribute_no",
"warehouse_no",
"yn"
],
"attached_condition": "(
(`report`.`picking_locate_d`.`yn` = 0)
and (`report`.`picking_locate_d`.`wave_no` in ('BC76361213164811','BC76361213164810','BC76361213155124','BC76361213154684','BC76361213155125'))
and (`report`.`picking_locate_d`.`org_no` = '661')
and (`report`.`picking_locate_d`.`distribute_no` = '763')
and (`report`.`picking_locate_d`.`warehouse_no` = '612')
)"
}
}
}
}

=======================================================================

将wave_no IN修改为CONCAT(wave_no,'') IN进行测试

SQL语句:

SELECT wave_no,
SUM(IF(picking_qty IS NULL, , picking_qty)) AS PICKED_QTY,
SUM(IF(differ_qty IS NULL, , differ_qty)) AS PICKED_DIFFER_QTY,
SUM(IF(relocate_qty IS NULL, , relocate_qty)) AS PICKED_RELOCATE_QTY FROM picking_locate_d
WHERE yn =
AND CONCAT(wave_no,'') IN
(
'BC76361213164811',
'BC76361213164810',
'BC76361213154684',
'BC76361213155125'
)
AND org_No= ''
AND distribute_No = ''
AND warehouse_No = ''
GROUP BY wave_no

执行计划:

+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
| | SIMPLE | picking_locate_d | NULL | index | idx_wave_no | idx_wave_no | | NULL | | 0.01 | Using where |
+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+

执行计划JSON:

EXPLAIN: {
"query_block": {
"select_id": ,
"cost_info": {
"query_cost": "9549155.40"
},
"grouping_operation": {
"using_filesort": false,
"table": {
"table_name": "picking_locate_d",
"access_type": "index",
"possible_keys": [
"idx_wave_no"
],
"key": "idx_wave_no",
"used_key_parts": [
"wave_no"
],
"key_length": "",
"rows_examined_per_scan": ,
"rows_produced_per_join": ,
"filtered": "0.01",
"cost_info": {
"read_cost": "9548404.95",
"eval_cost": "750.45",
"prefix_cost": "9549155.40",
"data_read_per_join": "22M"
},
"used_columns": [
"id",
"wave_no",
"picking_qty",
"differ_qty",
"relocate_qty",
"org_no",
"distribute_no",
"warehouse_no",
"yn"
],
"attached_condition": "(
(`report`.`picking_locate_d`.`yn` = )
and (concat(`report`.`picking_locate_d`.`wave_no`,'') in ('BC76361213164811','BC76361213164810','BC76361213154684','BC76361213155125'))
and (`report`.`picking_locate_d`.`org_no` = '')
and (`report`.`picking_locate_d`.`distribute_no` = '')
and (`report`.`picking_locate_d`.`warehouse_no` = '')
)"
}
}
}
}

=======================================================================

去除org_No/distribute_No/warehouse_No任意列的过滤条件,如去除AND org_No= '661'

SQL语句

SELECT wave_no,
SUM(IF(picking_qty IS NULL, , picking_qty)) AS PICKED_QTY,
SUM(IF(differ_qty IS NULL, , differ_qty)) AS PICKED_DIFFER_QTY,
SUM(IF(relocate_qty IS NULL, , relocate_qty)) AS PICKED_RELOCATE_QTY FROM picking_locate_d
WHERE yn =
AND wave_no IN
(
'BC76361213164811',
'BC76361213164810',
'BC76361213154684',
'BC76361213155125'
)
## AND org_No= ''
AND distribute_No = ''
AND warehouse_No = ''
GROUP BY wave_no;

执行计划:

+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
| | SIMPLE | picking_locate_d | NULL | index | idx_wave_no | idx_wave_no | | NULL | | 0.01 | Using where |
+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+

执行计划JSON

EXPLAIN: {
"query_block": {
"select_id": ,
"cost_info": {
"query_cost": "38400.01"
},
"grouping_operation": {
"using_filesort": false,
"table": {
"table_name": "picking_locate_d",
"access_type": "range",
"possible_keys": [
"idx_wave_no"
],
"key": "idx_wave_no",
"used_key_parts": [
"wave_no"
],
"key_length": "",
"rows_examined_per_scan": ,
"rows_produced_per_join": ,
"filtered": "0.10",
"index_condition": "(
(`report`.`picking_locate_d`.`wave_no` in ('BC76361213164811','BC76361213164810','BC76361213154684','BC76361213155125'))
and (`report`.`picking_locate_d`.`distribute_no` = '')
and (`report`.`picking_locate_d`.`warehouse_no` = '')
)",
"cost_info": {
"read_cost": "38396.81",
"eval_cost": "3.20",
"prefix_cost": "38400.01",
"data_read_per_join": "98K"
},
"used_columns": [
"id",
"wave_no",
"picking_qty",
"differ_qty",
"relocate_qty",
"org_no",
"distribute_no",
"warehouse_no",
"yn"
],
"attached_condition": "(`report`.`picking_locate_d`.`yn` = 0)"
}
}
}
}

MySQL Execution Plan--IN子查询包含超多值引发的查询异常1的更多相关文章

  1. MySQL Execution Plan--IN子查询包含超多值引发的查询异常

    问题描述 版本:MySQL 5.7.24 SQL语句: SELECT wave_no, SUM(IF(picking_qty IS NULL, 0, picking_qty)) AS PICKED_Q ...

  2. MySQL Execution Plan--NOT EXISTS子查询优化

    在很多业务场景中,会使用NOT EXISTS语句来确保返回数据不存在于特定集合,部分场景下NOT EXISTS语句性能较差,网上甚至存在谣言"NOT EXISTS无法走索引". 首 ...

  3. query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max

    3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...

  4. Mysql查询优化器之关于子查询的优化

    下面这些sql都含有子查询: mysql> select * from t1 where a in (select a from t2); mysql> select * from (se ...

  5. MySQL(八)子查询和分组查询

    一.子查询 1.子查询(subquery):嵌套在其他查询中的查询. 例如:select user_id from usertable where mobile_no in (select mobil ...

  6. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  7. 为什么MySQL不推荐使用子查询和join

    前言: 1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据. 2.子 ...

  8. MySQL中 如何查询表名中包含某字段的表 ,查询MySql数据库架构信息:数据库,表,表字段

    --查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where ta ...

  9. mysql update不支持子查询更新

    先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...

随机推荐

  1. spring cloud 随笔记录(1)-

    最近随着微服务的火热,我也开始对我服务进行了解了  毕竟程序员这一行需要及时更新自己的技能,才能更好的生存. 我理解的微服务  项目由多个独立运行的程序组成,每个服务运行在自己的进程中,服务间采用轻量 ...

  2. Java容器解析系列(8) Comparable Comparator

    Comparable和Comparator接口是两个用于对对象进行大小比较的接口,在java集合相关类中,也被经常地使用到. 关于其使用,可以参考网络上的其他博客(没什么好说的);这里阐述关于这两个接 ...

  3. 初读"Thinking in Java"读书笔记之第八章 --- 多态

    再论向上转型 在某些方法中,仅接收基类作为参数,而不是特殊的导出类,会使得程序更容易扩展. 转机 方法调用绑定 前期绑定(编译期绑定):在编译期将一个方法调用和方法主体关联起来. 后期绑定(动态绑定或 ...

  4. HTTP请求协议

    请求(Request)协议 * GET请求方式 * 请求行 * http协议的版本信息 1.1 * 请求地址 - URL?key=value&key=value * 请求方式 - GET * ...

  5. nginx配置支持http2

    1.简介 nginx 配置支持http2.目前大多数网站都是http1.1(如果你没有特别配置过的话) 一切都是为了访问更快. 2.如何查看自己网站的http版本 最简单的方法就F12啊,我这里是火狐 ...

  6. fdisk -l查看硬盘分区信息及硬盘分区介绍

    原文:https://blog.csdn.net/a1809032425/article/details/79692035 linux fdisk 命令和df区别是什么? fdisk工具是分区工具:d ...

  7. node.js 之 N-blog

    N-blog  使用 Express + MongoDB 搭建多人博客 原文地址: https://github.com/nswbmw/N-blog 建议初学者,研究下整个项目. 这里节选了一些内容为 ...

  8. Navicat连接mysql出现1045错误

    使用Navicat连接mysql出现1045,可能的原因为忘记密码,下面方法可以帮助重置密码. 1,以管理员权限运行cmd程序: 2,cd C:\Program Files (x86)\MySQL\M ...

  9. Linux系统KVM虚拟化技术

    在公司工作时出现了这样一个需求:需要在一台服务器中安装两个系统,分别部署不同的服务,设置不同的系统时间,并且两个系统之间可以互相通讯.在网上查询相关资料后,决定通过KVM实现该功能,现将步骤记录如下. ...

  10. A The Empire Age

    1月28日 Description 帝国时代3是一款十分刺激的RTS游戏.你需要控制自己的一块殖民地,发展殖民地的经济和军事,最终打败其他殖民地.小L是这个游戏的狂热爱好者.一次小L打算打AI试试身手 ...