`
wlf
  • 浏览: 3160 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

最常见的SQL查询性能改善实践---用outer join 代替 not in

SQL 
阅读更多
一公司中的同一员工可以属于多个不同部门,如何列出还没有分配部门的员工??

员工表:create table emp(id int primary key, name varchar(100))
部门表:create table depart(id int primary key, name varchar(10))
关系表:create table emp_depart(eid int,did int)

注释:eid 是员工表emp的外键, did 是部门表depart的外键

常见查询是(性能不好):

select * from emp where id not in (select eid from emp_depart)

性能好的查询用outer join:

select emp.* from emp left join emp_depart on emp.id=emp_depart.eid where emp_depart.eid is null
1
0
分享到:
评论
1 楼 stephen830 2009-01-25  
为何不用 not exists呢?

select * from emp where not exists (select 'X' from emp_depart where id=eid)


相关推荐

    oracle性能优化技巧

    - 使用`DECODE`函数代替复杂的条件逻辑可以提高查询性能。 4. **减少数据库访问次数**: - 尽量减少对数据库的访问次数,可以通过合并多个查询来实现这一点。 5. **删除操作**: - 使用`TRUNCATE`代替`DELETE`...

    Oracle SQL最佳实践

    ### Oracle SQL最佳实践详解 #### 一、使用 EXISTS 代替 DISTINCT 消除排序操作 在进行数据查询时,为了去除结果集中的重复行,我们通常会使用 `DISTINCT` 关键字。然而,在某些场景下,这种方法可能会导致不必要...

    SQL最佳实践

    连接表是SQL查询中最常见的操作之一,包括内连接、外连接、交叉连接等。合理选择连接类型可以有效提高查询性能。 - **INNER JOIN**:返回两个表中匹配的行。 - **LEFT JOIN / RIGHT JOIN**:分别返回左表/右表的...

    如何写高效sql语句

    - 使用INNER JOIN代替OUTER JOIN,如果可能,因为INNER JOIN通常更快。 4. **使用子查询谨慎** - 子查询可以复杂且昂贵,尤其是在大表中。考虑使用JOIN或临时表替代复杂的子查询。 - 子查询可以与 EXISTS 或 NOT...

    sql优化心得

    - **使用EXISTS代替IN**:当查询涉及子查询时,使用EXISTS通常比IN更高效,因为前者可以在找到第一个匹配项后立即停止搜索。 - **避免SELECT * FROM**:指定所需的列名而非使用星号(*),这样可以减少不必要的...

    ORACLE和SQL Server的语法区别

    - **SQL Server:** SQL Server同样支持使用子查询进行更新操作,但在某些情况下可能需要重新编写子查询以适应SQL Server的语法。 ```sql UPDATE table_name SET column1 = (SELECT some_expr FROM some_table), ...

    常用的SQL开发技巧

    10. **避免使用子查询替换不恰当的NOT IN或IN**:有时,使用EXISTS或NOT EXISTS子查询可以提供更好的性能。 11. **合理使用聚合函数**:GROUP BY和HAVING子句用于数据分组,但过度使用可能导致性能问题。确保正确地...

    SQL性能优化

     推荐方案:用NOT EXISTS 或(Outer-Join+判断为空)方案代替 例如: SELECT deptno FROM dept WHERE deptno NOT IN(SELECT deptno FROM emp) 建议写成: SELECT deptno FROM dept, emp WHERE dept.deptno =...

    mysql优化.docx

    3. **使用连接(JOIN)代替子查询**: - 当处理大量数据时,JOIN 通常比子查询更高效,特别是在相关字段已经建立索引的情况下。JOIN 查询可以直接利用索引来快速匹配数据,而子查询可能需要创建临时表。对于 INNER ...

    Oracle高效SQL语句原则.txt

    - **建议**:使用`IN`、`EXISTS`等操作代替`NOT IN`和`NOT EXISTS`,或者使用外连接(OUTER JOIN)来实现相同的效果。 7. **优化WHERE子句中的逻辑运算符**: - 尽可能减少WHERE子句中的逻辑运算符数量,特别是`...

    sql语句优化原则

    - **示例**: 用 `JOIN` 替换 `IN` 来提高查询效率。 **5. 使用NOT EXISTS替换NOT IN** - **原理**: `NOT IN` 效率较低,因为它涉及到子查询的排序和合并。 - **建议**: 使用 `NOT EXISTS` 或者 `LEFT JOIN` 来...

    养成良好的sql习惯

    正确处理NULL值,如使用`IS NULL`和`IS NOT NULL`代替`= NULL`和`<> NULL`,可以避免不必要的查询开销。 8. **使用参数化查询:** 参数化查询不仅可以提高安全性,防止SQL注入攻击,还可以提高执行计划的复用率,...

    Oracle 开发DBA SQL编写规范

    - 使用`not exists`来替代`not in`,以提高查询效率。 - 示例: ```sql -- 错误示例 select * from tab1 where id not in (select id from tab2); -- 正确示例 select * from tab1 t1 where not exists ...

    sql语句优化技术分析

    SQL语句优化是数据库管理中的核心技能之一,它关乎到系统的性能、响应时间和资源利用率。在处理大量数据时,有效的SQL优化策略能显著提升数据库应用的效率。以下是对SQL语句优化技术的详细分析: 一、理解执行计划 ...

    30种mysql优化sql语句查询的方法.docx

    MySQL是世界上最流行的开源关系型数据库管理系统之一,优化SQL查询对于提升数据库性能至关重要。以下是对标题“30种mysql优化sql语句查询的方法.docx”中提及的一些关键优化策略的详细解释: 1. **避免全表扫描**:...

    MySQL性能优化的21个最佳实践.rar

    6. **减少JOIN操作**:尽量减少JOIN数量,优化JOIN顺序,使用INNER JOIN代替OUTER JOIN,避免笛卡尔积。 7. **使用连接(JOIN)条件**:确保JOIN条件包含索引,并且是等值连接,以利于优化器利用索引。 8. **避免...

    SQLServer优化

    - 避免使用NOT IN,可使用EXISTS、NOT EXISTS、IN、LEFT OUTER JOIN替代,其中EXISTS通常比IN更快。 - 使用IN时,将出现频率高的值放在列表前,以减少判断次数。 - BETWEEN在某些场景下比IN更快,特别是在基于...

    精彩编程与编程技巧-结构化查询语言(SQL)详解之一...

    在使用 Jet SQL 时,需要注意它的一些特性和限制,比如对通配符的支持不同(使用`%`代替`*`),以及对连接查询的不同语法。 #### 十四、案例分析与实践建议 为了更好地理解和掌握SQL,建议结合实际案例进行练习。...

    oracle管理及优化文档 粗略整理

    - 考虑使用左外连接(LEFT OUTER JOIN)来优化查询逻辑。 ##### 3. 避免使用不等号(<> 或 !=) - **原因分析**:这些符号不会利用索引进行查询,从而增加查询时间。 - **优化建议**:将条件改为`a > xx OR a 的...

Global site tag (gtag.js) - Google Analytics