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

SQL语句:

  1. SELECT wave_no,
  2. SUM(IF(picking_qty IS NULL, 0, picking_qty)) AS PICKED_QTY,
  3. SUM(IF(differ_qty IS NULL, 0, differ_qty)) AS PICKED_DIFFER_QTY,
  4. SUM(IF(relocate_qty IS NULL, 0, relocate_qty)) AS PICKED_RELOCATE_QTY FROM picking_locate_d
  5. WHERE yn = 0
  6. AND wave_no IN
  7. (
  8. 'BC76361213164811',
  9. 'BC76361213164810',
  10. 'BC76361213154684',
  11. 'BC76361213155125'
  12. )
  13. AND org_No= '661'
  14. AND distribute_No = '763'
  15. AND warehouse_No = '612'
  16. GROUP BY wave_no;

执行计划:

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

执行计划JOSN:

  1. EXPLAIN: {
  2. "query_block": {
  3. "select_id": 1,
  4. "cost_info": {
  5. "query_cost": "9548371.80"
  6. },
  7. "grouping_operation": {
  8. "using_filesort": false,
  9. "table": {
  10. "table_name": "picking_locate_d",
  11. "access_type": "index",
  12. "possible_keys": [
  13. "idx_wave_no"
  14. ],
  15. "key": "idx_wave_no",
  16. "used_key_parts": [
  17. "wave_no"
  18. ],
  19. "key_length": "153",
  20. "rows_examined_per_scan": 37518548,
  21. "rows_produced_per_join": 1875,
  22. "filtered": "0.01",
  23. "cost_info": {
  24. "read_cost": "9547996.61",
  25. "eval_cost": "375.19",
  26. "prefix_cost": "9548371.80",
  27. "data_read_per_join": "11M"
  28. },
  29. "used_columns": [
  30. "id",
  31. "wave_no",
  32. "picking_qty",
  33. "differ_qty",
  34. "relocate_qty",
  35. "org_no",
  36. "distribute_no",
  37. "warehouse_no",
  38. "yn"
  39. ],
  40. "attached_condition": "(
  41. (`report`.`picking_locate_d`.`yn` = 0)
  42. and (`report`.`picking_locate_d`.`wave_no` in ('BC76361213164811','BC76361213164810','BC76361213155124','BC76361213154684','BC76361213155125'))
  43. and (`report`.`picking_locate_d`.`org_no` = '661')
  44. and (`report`.`picking_locate_d`.`distribute_no` = '763')
  45. and (`report`.`picking_locate_d`.`warehouse_no` = '612')
  46. )"
  47. }
  48. }
  49. }
  50. }

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

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

SQL语句:

  1. SELECT wave_no,
  2. SUM(IF(picking_qty IS NULL, , picking_qty)) AS PICKED_QTY,
  3. SUM(IF(differ_qty IS NULL, , differ_qty)) AS PICKED_DIFFER_QTY,
  4. SUM(IF(relocate_qty IS NULL, , relocate_qty)) AS PICKED_RELOCATE_QTY FROM picking_locate_d
  5. WHERE yn =
  6. AND CONCAT(wave_no,'') IN
  7. (
  8. 'BC76361213164811',
  9. 'BC76361213164810',
  10. 'BC76361213154684',
  11. 'BC76361213155125'
  12. )
  13. AND org_No= ''
  14. AND distribute_No = ''
  15. AND warehouse_No = ''
  16. GROUP BY wave_no

执行计划:

  1. +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
  2. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
  3. +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
  4. | | SIMPLE | picking_locate_d | NULL | index | idx_wave_no | idx_wave_no | | NULL | | 0.01 | Using where |
  5. +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+

执行计划JSON:

  1. EXPLAIN: {
  2. "query_block": {
  3. "select_id": ,
  4. "cost_info": {
  5. "query_cost": "9549155.40"
  6. },
  7. "grouping_operation": {
  8. "using_filesort": false,
  9. "table": {
  10. "table_name": "picking_locate_d",
  11. "access_type": "index",
  12. "possible_keys": [
  13. "idx_wave_no"
  14. ],
  15. "key": "idx_wave_no",
  16. "used_key_parts": [
  17. "wave_no"
  18. ],
  19. "key_length": "",
  20. "rows_examined_per_scan": ,
  21. "rows_produced_per_join": ,
  22. "filtered": "0.01",
  23. "cost_info": {
  24. "read_cost": "9548404.95",
  25. "eval_cost": "750.45",
  26. "prefix_cost": "9549155.40",
  27. "data_read_per_join": "22M"
  28. },
  29. "used_columns": [
  30. "id",
  31. "wave_no",
  32. "picking_qty",
  33. "differ_qty",
  34. "relocate_qty",
  35. "org_no",
  36. "distribute_no",
  37. "warehouse_no",
  38. "yn"
  39. ],
  40. "attached_condition": "(
  41. (`report`.`picking_locate_d`.`yn` = )
  42. and (concat(`report`.`picking_locate_d`.`wave_no`,'') in ('BC76361213164811','BC76361213164810','BC76361213154684','BC76361213155125'))
  43. and (`report`.`picking_locate_d`.`org_no` = '')
  44. and (`report`.`picking_locate_d`.`distribute_no` = '')
  45. and (`report`.`picking_locate_d`.`warehouse_no` = '')
  46. )"
  47. }
  48. }
  49. }
  50. }

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

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

SQL语句

  1. SELECT wave_no,
  2. SUM(IF(picking_qty IS NULL, , picking_qty)) AS PICKED_QTY,
  3. SUM(IF(differ_qty IS NULL, , differ_qty)) AS PICKED_DIFFER_QTY,
  4. SUM(IF(relocate_qty IS NULL, , relocate_qty)) AS PICKED_RELOCATE_QTY FROM picking_locate_d
  5. WHERE yn =
  6. AND wave_no IN
  7. (
  8. 'BC76361213164811',
  9. 'BC76361213164810',
  10. 'BC76361213154684',
  11. 'BC76361213155125'
  12. )
  13. ## AND org_No= ''
  14. AND distribute_No = ''
  15. AND warehouse_No = ''
  16. GROUP BY wave_no;

执行计划:

  1. +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
  2. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
  3. +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+
  4. | | SIMPLE | picking_locate_d | NULL | index | idx_wave_no | idx_wave_no | | NULL | | 0.01 | Using where |
  5. +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+

执行计划JSON

  1. EXPLAIN: {
  2. "query_block": {
  3. "select_id": ,
  4. "cost_info": {
  5. "query_cost": "38400.01"
  6. },
  7. "grouping_operation": {
  8. "using_filesort": false,
  9. "table": {
  10. "table_name": "picking_locate_d",
  11. "access_type": "range",
  12. "possible_keys": [
  13. "idx_wave_no"
  14. ],
  15. "key": "idx_wave_no",
  16. "used_key_parts": [
  17. "wave_no"
  18. ],
  19. "key_length": "",
  20. "rows_examined_per_scan": ,
  21. "rows_produced_per_join": ,
  22. "filtered": "0.10",
  23. "index_condition": "(
  24. (`report`.`picking_locate_d`.`wave_no` in ('BC76361213164811','BC76361213164810','BC76361213154684','BC76361213155125'))
  25. and (`report`.`picking_locate_d`.`distribute_no` = '')
  26. and (`report`.`picking_locate_d`.`warehouse_no` = '')
  27. )",
  28. "cost_info": {
  29. "read_cost": "38396.81",
  30. "eval_cost": "3.20",
  31. "prefix_cost": "38400.01",
  32. "data_read_per_join": "98K"
  33. },
  34. "used_columns": [
  35. "id",
  36. "wave_no",
  37. "picking_qty",
  38. "differ_qty",
  39. "relocate_qty",
  40. "org_no",
  41. "distribute_no",
  42. "warehouse_no",
  43. "yn"
  44. ],
  45. "attached_condition": "(`report`.`picking_locate_d`.`yn` = 0)"
  46. }
  47. }
  48. }
  49. }

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. apex透视自瞄无后子弹追踪飞天加速辅助

    apex透视自瞄无后子弹追踪飞天加速辅助apex透视自瞄无后子弹追踪飞天加速辅助apex透视自瞄无后子弹追踪飞天加速辅助apex透视自瞄无后子弹追踪飞天加速辅助apex透视自瞄无后子弹追踪飞天加速辅助 ...

  2. mysql建表时

    问题:Incorrect column specifier for column 'id' 答案:原来自动增长列用int数据类型,不用varchar

  3. python基础(内存分析,不引入第三方变量的方式交换变量的值)

    a,b指向同一块内存地址 下面方法是重新给b赋值;a,b指向不同的内存地址 字符串或int类型内存分析 不引入第三方变量的方式,交换a,b的值

  4. vue-cli title 里面怎动态显示文字

    在路由里每个都添加一个meta[{ path:'/login', meta: { title: '登录页面' }, component:'login' }]   main.js里面加如下代码:     ...

  5. UGUI血条

    using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI; pu ...

  6. SQLServer数据库

    分离数据库:右键数据库→任务→分离数据库→确定 附加数据库:数据库右键→任务→附加→选择要附加的dlf文件→附加 导出SQL脚本步骤:右键数据库→任务→生成脚本→高级→要编写脚本的数据的类型→架构和数 ...

  7. 爬取QQ音乐歌手的歌单

    import requests# 引用requests库res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search ...

  8. linux定时清理日志

    服务器硬盘较小,需要自动删除日志 1.编写find命令 首先编写需要删除文件的sh #删除50天前的日志 find */logs -mtime +50 -exec rm -f {} \; #注意目录  ...

  9. Invoker-n颜色涂m个珠子的项链

    参考https://blog.csdn.net/anxdada/article/details/76862564. https://blog.csdn.net/baidu_35643793/artic ...

  10. epoll+socket实现 socket并发 linux服务器

    /* 实现功能:通过epoll, 处理多个socket * 监听一个端口,监听到有链接时,添加到epoll_event * xs */ #include <stdio.h> #includ ...