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

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. Swift学习之道

    Swift是苹果公司2014年推出的,用来撰写OSX和iOS应用程序的 2014年在Apple WWDC发布 可以与OC互相调用. Swift的特点:让应用开发简单,更加稳定,但是和OC的语法不是一般 ...

  2. 动态规划———最长公共子序列(LCS)

    最长公共子序列+sdutoj2080改编: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/ ...

  3. struts拦截器的知识

    如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了str ...

  4. 为什么Python是最适合初创公司的编程语言?

    为什么Python是最适合初创公司的编程语言? 选自Medium 作者:Gleb Pushkov 京东云开发者社区编译 对于初创公司而言,要在众多编程语言中为公司选择一个正确.合适的语言绝非易事. 如 ...

  5. APP测试报告

    招标手机APP测试总结报告     作    者: 日    期: 2016-03-10 文档编号: 002 版    本: Ver 1.0 目   录 1.测试概述 1 1.1. 编写目的 1 1. ...

  6. Java Web 项目发布到Tomcat中三种部署方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: <Context path="/" docBase="E:\TOMCAT\a ...

  7. Thymeleaf中href与 th:href的区别

    语法格式如下: <a th:href="@{/channel/page/add}">添加渠道 </a> <a href="/channel/ ...

  8. 【原创】Proxmark3系列教程1——PM3用法

    1 PM3介绍 proxmark3是一款开源的RFID安全研究平台黑色按钮从图中我们可以看到左上方有一颗黑色按钮,这个按钮就是Proxmark3的功能键,主要用于启动嗅探模式以及停止进程功能,其中内置 ...

  9. WEB学习笔记11-高可读性的HTML之如何设置网页标题层级

    标题标签指的是<h1>~<h6>这6个标签,统称为<hx>标签. (1)在页面内容的标题部分使用<hx>标签 <h1 class="re ...

  10. 以太坊上发行ERC20代币

    ERC20 代币生成 环境 虚拟主机: ubuntu 18虚拟机 宿主主机: win10; ip:192.168.0.160 1.部署以太坊 1.1 安装GO 安装go,并编译geth 将下载好的go ...