`
openxtiger
  • 浏览: 150831 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql的exists与inner join 和 not exists与 left join 性能差别惊人

阅读更多

由于客户数据量越来越大,在实践中让我发现mysql的exists与inner join 和 not exists与 left join 性能差别惊人。

我们一般在做数据插入时,想插入不重复的数据,或者盘点数据在一个表,另一个表否有存在相同的数据会用not exists和exists,例如:

insert into t1(a1) select b1 from t2 where not exists(select 1 from t1 where t1.id = t2.r_id);

 

如果t1的数据量很大时,性能会非常慢。经过实践,用以下方法能提高很多。

insert into t1(a1)
select b1 from t2
left join (select distinct t1.id from t1 ) t1 on t1.id = t2.r_id 
where t1.id is null;

 

 

select * from t1 where exists(select 1 from t2 where t1.id=t2.r_id);

 替换为:

select t1.* from t1 
inner join (select distinct r_id from t2) t2 on t1.id= t2.r_id 

 

这是实践的得出的结果。不知否有其他更好的方法,或则这个只是特例而已。 

 

3
3
分享到:
评论
1 楼 zhouweideshijie 2017-02-24  
为什么在join的时候需要(select distinct t1.id from t1 ),这样做的好处是什么

相关推荐

    搞懂mysql的exists

    2. `EXISTS`可以看作是`LEFT JOIN`的一种特殊形式,但效率通常更高,因为它只需要知道存在匹配,而不需要返回匹配的行。 五、优化`EXISTS`的使用 1. 使用索引:确保子查询中的关键列有合适的索引,以提高查询速度。...

    浅析Mysql Join语法以及性能优化

    JOIN类型主要有INNER JOIN、LEFT JOIN和RIGHT JOIN。 INNER JOIN(内连接)返回两个表中满足连接条件的匹配记录。这可以视为两个集合的交集。例如,在示例中,当A表的name字段等于B表的name字段时,INNER JOIN会...

    Oracle和MySQL语句区别.doc

    Oracle和MySQL都支持Inner Join、Left Outer Join、Right Outer Join和Full Outer Join等多种Join类型。然而,在Oracle中,需要使用FROM关键字来指定连接表,而在MySQL中,则使用JOIN关键字。 Subquery语句 ...

    很详细的mysql课程讲解

    2. 联接查询:理解内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)的概念,以及如何进行多表查询。 3. 子查询:学习如何在查询语句中嵌套子查询,以及使用IN、NOT IN、EXISTS、NOT EXISTS等操作...

    MySQL SQL执行计划分析与优化方案.pptx

    Join 方式有多种,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 等。 例如,在以下的查询语句中,我们可以使用 INNER JOIN 将两个表合并成一个表: ```sql SELECT * FROM score INNER JOIN student ...

    【MySQL数据库】二级考试易错题整理

    - INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN:INNER JOIN返回两个表的交集,LEFT JOIN返回左表所有记录及右表匹配的记录,RIGHT JOIN反之,FULL OUTER JOIN返回两表的所有记录。 7. 子查询: - 子查询...

    MySQL常用练手题目集合 MySQL查询练习题(50题) 共18页.pdf

    - **关联查询**:通过`INNER JOIN`或`LEFT JOIN`查找关联条件的学生信息。 - **课程组合查询**:使用`AND`和`OR`逻辑运算符结合`IN`或`NOT IN`操作符来查找特定课程组合的学生。 - **无完整课程记录**:使用`...

    mysql面试题30道

    MySQL 中有多种连接类型,例如 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 等。INNER JOIN 用于返回两个表中公共部分的记录,LEFT JOIN 用于返回左表中所有记录,RIGHT JOIN 用于返回右表中所有记录,FULL...

    mysql_Query优化

    根据连接条件的不同,JOIN 可分为 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN 等。 **5.2 JOIN 的优化策略** - **选择合适的 JOIN 类型**: 使用 INNER JOIN 而不是子查询,以减少中间结果集。 - **...

    MySQL练习题(34道)

    这些问题覆盖了SQL的基础查询,如`SELECT`, `FROM`, `WHERE`, `GROUP BY`, `JOIN`, `ORDER BY`, `LIMIT`, `HAVING`, `CASE`, `NOT EXISTS`, `LEFT JOIN`, `INNER JOIN`等,同时涉及了子查询和连接操作。通过解答这些...

    mysql基础知识扫盲

    =`, `EXISTS`, `NOT EXISTS`等关键字与子查询配合。 2. 子查询可以替代内连接,但内连接通常效率更高,如无特殊需求,建议首选内连接。 联合查询(UNION)用于合并两个或更多查询的结果: 1. `UNION`移除重复行,`...

    一千行 mysql 学习笔记.docx

    - 理解`JOIN`操作的优化,如避免全表扫描和使用`INNER JOIN`而非`LEFT JOIN`。 - 使用`EXPLAIN EXTENDED`和`SHOW WARNINGS`来进一步分析查询性能问题。 通过深入学习这些知识点,并结合实践,你将能够更好地理解...

    MySQL入门很简单

    - JOIN操作:连接多个表,如INNER JOIN、LEFT JOIN、RIGHT JOIN等。 - GROUP BY与聚合函数:分组数据并计算统计值,如COUNT、SUM、AVG、MAX、MIN。 - HAVING子句:对GROUP BY后的结果进行过滤。 - 子查询:在...

    里面包含mysql的整个数据库的学习资料,包含建表,外键,模糊查询,子查询,内连接等

    - 连接查询可以用于合并多个表的信息,主要有内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)等。 - 通过连接查询可以在一个查询语句中检索出相互关联的表的信息。 8. 子查询和模糊查询 - 子...

    mysql经典面试题及答案.zip

    2. JOIN操作:了解INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN的区别,并能写出相应的查询语句。 3. 子查询:理解嵌套查询的使用,包括IN、EXISTS、ANY、ALL等操作符。 4. 分区表:在大型数据集上,了解...

    罗炳森-SQL等价改写核心思想

    在优化这类查询时,同样可以利用转换来提高效率,例如将NOT IN替换为LEFT JOIN和NULL检查,或者将NOT EXISTS替换为OUTER JOIN。 此外,标量子查询(Scalar Subquery)在SQL等价改写中也有重要作用,它可以用于表示...

    基于SQL数据库的性能优化问题分析.rar

    2. **使用合适的JOIN类型**:了解不同JOIN(如INNER JOIN, LEFT JOIN, RIGHT JOIN)的性能差异,并根据业务需求选择最合适的。 3. **避免使用NOT IN和IN运算符**:这些运算符可能导致全表扫描,可以考虑使用EXISTS或...

    数据库系统及原理及MYSQL应用教程多表连接和子查询实验报告

    - **外连接(OUTER JOIN)**:包括左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)。左外连接返回所有左表的记录,即使在右表中没有匹配的记录,反之亦然。这在显示所有学生信息,即使他们没有选修任何课程时非常有用。 ...

    使用SQL语句提高数据库性能的几种技巧.pdf

    例如,为没有关联数据的字段设置默认值或特殊标识,这样可以用INNER JOIN替代LEFT JOIN,减少不必要的NULL匹配。 - 如果必须使用LEFT JOIN,确保查询的粒度合适,避免一次性加载过多数据。 2. **避免全表扫描** ...

Global site tag (gtag.js) - Google Analytics