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

使用连接(JOIN)来代替子查询(Sub-Queries) mysql优化系列记录

阅读更多

使用连接(JOIN)来代替子查询(Sub-Queries)

MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

  使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

  如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:

SELECT * FROM customerinfo
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.
CustomerID
WHERE salesinfo.CustomerID IS NULL

  连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作

分享到:
评论

相关推荐

    MySQL优化之使用连接(join)代替子查询

    本文将探讨如何通过使用连接(JOIN)操作来替代子查询(Sub-Queries),以提高查询效率。 子查询是一种强大的SQL工具,它允许在一个查询中嵌套另一个查询,以获取所需的结果。然而,虽然子查询提供了方便和灵活性,...

    MySQL-性能优化的-9-种知识.docx

    3. 使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用select语句来创建一个单例的查询结果,然后把这个结果作为过滤条件用在另一个查询中。使用连接(JOIN)可以提高...

    优化MySQL数据库性能的八种方法

    优化MySQL数据库性能的八种方法, 1、选取最适用的字段属性 2、使用连接(JOIN)来代替子查询(Sub-Queries) 3、使用联合(UNION)来代替手动创建的临时表

    mysql优化方法详解

    1、选择最合适的字段属性 2、尽量把字段设置为NOT NULL 3、使用连接(JOIN)来代替子查询(Sub-Queries) 4、使用联合(UNION)来代替手动创建的临时表 5、事务 6、使用外键 7、锁定表 8、使用索引 9、优化sql的查询语句

    MySQL数据库性能(SQL)优化方案-期末论文.doc

    使用连接(JOIN)来代替子查询(Sub-Queries) 虽然MySQL从4.1版本开始支持子查询,但相比于子查询,使用连接查询通常能提供更好的性能。这是因为连接查询可以避免创建临时表,从而减少资源消耗并加快查询速度。例如,...

    MySQL优化.docx

    * 优化子查询(sub query) * 优化表连接(join) * 使用索引,提高查询速度 * 避免使用SELECT \*,只选择需要的列 应用程序优化 * 使用存储过程、触发器、视图,提高应用程序的效率 * 定期执行optimize / analyze...

    完全优化MySQL数据库性能的八大巧方法.doc

    2. **使用连接(JOIN)替代子查询(Sub-Queries)** - 子查询虽方便,但连接通常更高效。例如,删除无订单的客户,使用 JOIN 查询(LEFT JOIN + WHERE 子句)比子查询更快,特别是当对 salesinfo 表的 CustomerID ...

    完全优化MySQL数据库性能的八大巧方法

    使用子查询(Sub-Queries) - **知识点四**:子查询是一种强大的工具,可以简化复杂的查询逻辑。 - **描述**:MySQL 4.1版本开始支持子查询功能,允许在一个查询中嵌套另一个查询。例如,删除那些没有销售记录的...

    优 化 数 据 的 八大 技 巧

    2. **使用连接(JOIN)替代子查询(Sub-Queries)** - 尽管子查询方便,但在某些情况下,使用JOIN能提升效率。例如,查找无订单的客户,JOIN操作比子查询更快,尤其是当JOIN的字段已建立索引时。 3. **使用联合...

    SQL数据库性能优化

    #### 二、使用连接(JOIN)来代替子查询(Sub-Queries) 在进行复杂查询时,子查询是一种常见且直观的方法,但使用连接往往能提供更好的性能。连接可以有效地减少数据库的中间处理步骤,避免创建不必要的临时表。例如:...

    MySQL数据库优化的八种方式

    2. **使用连接(JOIN)代替子查询(Sub-Queries)** - **优化查询结构**:子查询虽然方便,但在某些场景下,连接操作可能更快,特别是当子查询中的字段有索引时。 - **LEFT JOIN消除NULL匹配**:通过LEFT JOIN并...

    MYSQL 优化常用方法

    尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种...

    数据库面试问题.doc

    2. 使用连接(JOIN)来代替子查询(Sub-Queries)。MySQL从4.1开始支持SQL的子查询。 3. 使用外键。锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。 4. 使用索引。...

    php_面试常用题目

    - 使用子查询(Sub-Queries)或 JOIN 语句来组合多个数据表的信息。 - 使用 UNION 操作符合并多个 SELECT 语句的结果。 5. **获取当前日期时间** - MySQL 提供了 `NOW()` 函数来获取当前日期时间。 - `DATE_...

    php面试题合集很好的

    - 使用子查询(Sub-Queries)和 `JOIN` 语句来提高查询效率。 - 使用 `LIKE` 运算符进行模糊匹配,但应避免前导通配符,因为它可能导致全表扫描。 - 使用 `NOW()` 和 `DATE_FORMAT()` 函数来处理日期和时间。 ##...

Global site tag (gtag.js) - Google Analytics