MySQL Execution Plan--IN子查询包含超多值引发的查询异常1
=======================================================================
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的更多相关文章
- MySQL Execution Plan--IN子查询包含超多值引发的查询异常
问题描述 版本:MySQL 5.7.24 SQL语句: SELECT wave_no, SUM(IF(picking_qty IS NULL, 0, picking_qty)) AS PICKED_Q ...
- MySQL Execution Plan--NOT EXISTS子查询优化
在很多业务场景中,会使用NOT EXISTS语句来确保返回数据不存在于特定集合,部分场景下NOT EXISTS语句性能较差,网上甚至存在谣言"NOT EXISTS无法走索引". 首 ...
- query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max
3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...
- Mysql查询优化器之关于子查询的优化
下面这些sql都含有子查询: mysql> select * from t1 where a in (select a from t2); mysql> select * from (se ...
- MySQL(八)子查询和分组查询
一.子查询 1.子查询(subquery):嵌套在其他查询中的查询. 例如:select user_id from usertable where mobile_no in (select mobil ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- 为什么MySQL不推荐使用子查询和join
前言: 1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据. 2.子 ...
- MySQL中 如何查询表名中包含某字段的表 ,查询MySql数据库架构信息:数据库,表,表字段
--查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where ta ...
- mysql update不支持子查询更新
先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...
随机推荐
- C# 异常:索引超出了数组界限。
数组如果只取到了三个元素, 而引用数组的时候引用了五个, 就会有此错误.
- LeetCode 145 二叉树的后序遍历(非递归)
题目: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路: 1 ...
- Python的基础语法
一,编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: 1 # -*- coding: cp-1252 ...
- date clock
设置Linux系统时间:date -s "2017-06-22 15:44:30" 自定义时间显示格式:date "+%Y-%m-%d %H:%M:%S" 查 ...
- DevExpress v18.2新版亮点——DevExtreme篇(四)
行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExtreme Complete Sub ...
- 20175224 2018-2019-2 《Java程序设计》第三周学习总结
教材学习内容总结 编程语言发展的几个阶段 面向机器语言 面向过程语言 面向对象语言 封装性 继承性 多态性 类 类是Java程序的基本要素,一个Java应用程序就是由若干个类所构成的. 类是Java语 ...
- unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?
https://segmentfault.com/a/1190000012357091 unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家 ...
- 解决Exception in thread "main" java.nio.BufferOverflowException报错
学习bytebuffer时,写了简单的demo报错: 错误的提示:Exception in thread "main" java.nio.BufferOverflowExcepti ...
- 使用VS调试DUMP文件
使用前准备: 1.保存编译文件的PDB文件(要和生成exe文件的对应) 2.在开发机器上,使用vs直接双击打开dmp文件,注意 进程名称 ,这个是程序运行crash的时候所在的目录位置,这个很重要. ...
- python写mapReduce初步
最近在学了python了,从mapReduce开始 ,话不多说了,直接上代码了哈 map阶段,map.py文件 import sys # 标准输入 # 在终端的话,就需要这样了 cat a.txt | ...