Sql优化过程中经常会说到使用Exists代替In,网上看了很多都说Exists执行效率高于In。但在实际生产环境中,自己尝试将in修改成exist,往往不能提高效率。最后总结发现问题的的核心的就是在什么时候我们需要经In的SQL修改成Exists。下述一个案例,一次分析。
1、环境介绍
MySQL 5.6.16
2、对象信息介绍
MySQL [promotion]> select count(*) from dba_test_channel;
++
| count(*) |
++
| 500001 |
++
1 row in set (0.07 sec)
MySQL [promotion]> select count(*) from dba1_test_channel;
++
| count(*) |
++
| 9508 |
++
1 row in set (0.00 sec)
MySQL [promotion]> select count(*) from dba2_test_channel;
++
| count(*) |
++
| 331 |
++
1 row in set (0.00 sec)
MySQL [promotion]>
MySQL [promotion]> select count(*) from p_channel;
++
| count(*) |
++
| 7559141 |
++
1 row in set (0.78 sec)
MySQL [promotion]> select count(*) from p_channel_data;
++
| count(*) |
++
| 17034946 |
++
1 row in set (3.37 sec)
MySQL [(none)]> show variables like 'query%';
++-+
| Variable_name | Value |
++-+
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 3145728 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
++-+
7