MYSQL IN 与 EXISTS 的优化示例介绍
2018-01-16 10:17
459 查看
优化原则:小表驱动大表,即小的数据集驱动大的数据集。
############# 原理 (RBO) #####################
当B表的数据集必须小于A表的数据集时,用in优于exists。
当A表的数据集系小于B表的数据集时,用exists优于in。
注意:A表与B表的ID字段应建立索引。
例如:
############# 原理 (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);
相关文章推荐
- MYSQL IN 与 EXISTS 的优化示例介绍
- MYSQL IN 与 EXISTS 的优化示例
- MYSQL IN 与 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 exists
- MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍
- mysql关键字 exists 与 in
- MySQL学习(5)IN,GRANT,MD5,EXISTS
- MySQL优化---数据类型介绍
- mysql中or和in,in和exists的效率问题
- msyql中子查询IN,EXISTS,ANY,ALL,SOME,UNION介绍
- 【转】 SQL优化--使用 EXISTS 代替 IN 和 inner join来选择正确的执行计划
- MySQL-IN和Exists区别
- MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍
- 浅析MySQL中exists与in的使用
- MySQL中select语句介绍及使用示例