MYSQL IN 与 EXISTS 的优化示例介绍
2014-08-01 00:00
731 查看
优化原则:小表驱动大表,即小的数据集驱动大的数据集。
############# 原理 (RBO) #####################
select * from A where id in (select id from B)
等价于:
for select id from B
for select * from A where A.id = B.id
当B表的数据集必须小于A表的数据集时,用in优于exists。
select * from A where exists (select 1 from B where B.id = A.id)
等价于
for select * from A
for select * from B where B.id = A.id
当A表的数据集系小于B表的数据集时,用exists优于in。
注意:A表与B表的ID字段应建立索引。
例如:
/** 执行时间:0.313s **/
SELECT SQL_NO_CACHE * FROM rocky_member m WHERE EXISTS (SELECT 1 FROM rocky_vip_appro a WHERE m.ID = a.user_id AND a.passed = 1);
/** 执行时间:0.160s **/
SELECT SQL_NO_CACHE * FROM rocky_member m WHERE m.ID in(SELECT ID FROM rocky_vip_appro WHERE passed = 1);
not in 和not exists用法类似。
############# 原理 (RBO) #####################
select * from A where id in (select id from B)
等价于:
for select id from B
for select * from A where A.id = B.id
当B表的数据集必须小于A表的数据集时,用in优于exists。
select * from A where exists (select 1 from B where B.id = A.id)
等价于
for select * from A
for select * from B where B.id = A.id
当A表的数据集系小于B表的数据集时,用exists优于in。
注意:A表与B表的ID字段应建立索引。
例如:
/** 执行时间:0.313s **/
SELECT SQL_NO_CACHE * FROM rocky_member m WHERE EXISTS (SELECT 1 FROM rocky_vip_appro a WHERE m.ID = a.user_id AND a.passed = 1);
/** 执行时间:0.160s **/
SELECT SQL_NO_CACHE * FROM rocky_member m WHERE m.ID in(SELECT ID FROM rocky_vip_appro WHERE passed = 1);
not in 和not exists用法类似。
相关文章推荐
- MYSQL IN 与 EXISTS 的优化示例介绍
- MYSQL IN 与 EXISTS 的优化示例
- MySQL的in查询效率太低的解决办法之一与其它优化示例
- MySQL性能优化(六)-- using filesort,in和exists,慢查询,mysqldumpslow
- MySQL中子查询IN,EXISTS,ANY,ALL,SOME,UNION介绍
- MYSQL IN 与 EXISTS 的优化示例介绍
- MYSQL IN 与 EXISTS 的优化示例介绍,mysql exists
- MYSQL IN 与 EXISTS 的优化
- MYSQL IN 与 EXISTS 的优化示例介绍
- sql语句优化--用EXISTS替代IN、用NOT EXISTS替代NOT IN
- IN&EXISTS与NOT IN&NOT EXISTS 的优化原则的讨论
- 优化mysql性能的几个参数的介绍
- 【转】 SQL优化--使用 EXISTS 代替 IN 和 inner join来选择正确的执行计划
- sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
- 优化小技巧(exists && in)
- mysql 参数配置优化详介绍
- IN&EXISTS与NOT IN&NOT EXISTS 的优化原则小结
- MySQL优化经验(实例介绍,经验的总结)
- MySQL学习(5)IN,GRANT,MD5,EXISTS
- SQL优化--使用 EXISTS 代替 IN 和 关联查询(inner join) (转载)http://www.cnblogs.com/zping/archive/2008/08/05/1260959.html