`

关于Exists和inner join 一点讨论

阅读更多

exists的效率依赖于匹配度。
inner join效率比较稳定。

select * from ta a where exists(select 1 from tb where a.id=b.id)
每扫ta一行,都扫tb,遇到匹配即返回ture,对tb的扫描在ta当前行不再继续下去,如果一直没找到,就会扫完tb (索引,或表扫)

即是说,匹配度很低,效率就很差。

举个极端, tb中每行的id都与ta中每行id相同
即 ta
id
1
1
1
1
1
,,,
tb
id
1
1
1
1
1
1
一扫就有返回,效率极高

反之
ta
id
1
1
1
1
1
1
1
...
tb
id
0
0
0
0
0
0
..
每扫ta一行,都要扫完tb,效率极差。


内连接效率则稳定。 在不很清楚实际数据分布情况下,最好用内连接。

分享到:
评论

相关推荐

    关于in and inner/outer join and exists

    在SQL查询中,`IN`、`INNER JOIN`、`OUTER JOIN` 和 `EXISTS` 是四个重要的关键字,它们用于处理数据表之间的关联和筛选。这些概念在数据库设计和数据检索中至关重要,理解并熟练运用它们能显著提高查询效率。 1. *...

    PostgreSQL IN vs EXISTS vs ANYALL vs JOIN性能分析

    在应用目标上,以pgbench_accounts和pgbench_branches为例,我们可以通过四种不同的方式编写查询语句:使用IN子句、使用ANY子句、使用EXISTS子句和使用INNER JOIN。每种方式都有其特点和适用场景。例如,当需要判断...

    sql server2005 exists使用方法

    在很多情况下,可以通过使用 `INNER JOIN` 或 `LEFT JOIN` 替换 `EXISTS` 来简化查询,同时保持相同的逻辑结果。这种方法不仅可以减少嵌套,还能提高查询性能。 ```sql SELECT database_items FROM database_...

    搞懂mysql的exists

    例如,`INNER JOIN`会返回两个表中匹配的行。 2. `EXISTS`可以看作是`LEFT JOIN`的一种特殊形式,但效率通常更高,因为它只需要知道存在匹配,而不需要返回匹配的行。 五、优化`EXISTS`的使用 1. 使用索引:确保...

    详解SQL EXISTS 运算符

    结合`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`和`FULL OUTER JOIN`等,可以构建出更加灵活的查询策略,以满足不同业务需求。 总之,SQL EXISTS运算符是SQL查询中不可或缺的一部分,它允许开发者高效地检查子查询...

    SQL50道练习题(附答案)

    - **知识点**: 使用子查询确定特定学生所学课程,再使用`INNER JOIN`和`GROUP BY`找出学过完全相同课程的学生。 - **SQL语句**: ```sql SELECT DISTINCT S.S#, S.Sname FROM Student S INNER JOIN SC ON S.S# = ...

    SQL Server和Access在使用SQL语言中的差异研究.pdf

    SQL Server支持使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN,而Access支持使用INNER JOIN和LEFT JOIN。 七、安全性的差异 SQL Server和Access在安全性上的差异很大。SQL Server支持使用权限控制和加密,而...

    北邮SQL实验三实验报告

    - **解释**: 通过`INNER JOIN`连接`teacher`和`course`表,并通过`WHERE`子句筛选出特定系别和课程名称的老师记录。 ### 四、嵌套查询 #### 具体任务 1. **查询选修了“计算机基础”的学生的学号和姓名** - **...

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

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

    数据库培训文档 没有限制

    - 查询上级部门编号为0的部门的员工,可以通过INNER JOIN, IN子句和EXISTS子句实现。 - 插入部门信息,如创建一个部门ID为0,部门名称为“工程技术部”,上级部门编号为99的新记录。 - 查询部分未给出具体需求,...

    中国矿业大学数据库实验二

    这些查询展示了SQL语言的基础和进阶用法,包括连接操作(INNER JOIN)、子查询(EXISTS, NOT EXISTS, IN, NOT IN)、聚合函数(AVG, COUNT)以及条件过滤(WHERE, HAVING)。这些知识对于理解和处理数据库中的复杂...

    sql 多表查询

    此查询涉及S和SC两个表,通过`INNER JOIN`将学生表与成绩表连接起来,确保只返回那些在SC表中有记录的学生信息。 ```sql SELECT S.Sno, S.Sname, C.Cname, SC.Score FROM S INNER JOIN SC ON S.Sno = SC.Sno INNER ...

    数据库系统原理课程设计报告.pdf

    (7)找出学生代号为“S101”和“S102”两个学生都选修了的课程:SQL语句为SELECT S.SNO, G.CNO, C.CNAME FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO WHERE ((S.SNO)Like 's101') AND ...

    SQLite不支持Right Join的解决办法GROUP BY

    在SQLite中,虽然没有原生的Right Join支持,但可以通过LEFT JOIN、UNION ALL或INNER JOIN和GROUP BY的组合来达到相同效果。在选择方法时,应考虑性能和代码的可读性,以满足特定的业务需求。总的来说,SQLite是一个...

    简述Oracle中in和exists的不同

    - 对于大表,考虑使用`JOIN`操作代替`IN`或`EXISTS`,根据具体情况选择合适的连接类型(如INNER JOIN、LEFT JOIN等)。 - 使用`EXPLAIN PLAN`分析查询计划,了解数据库如何执行查询,以便进行优化。 - 在必要时,...

    18329015_郝裕玮_Lab41

    由于选课信息存储在`sc`表中,我们需要使用`INNER JOIN`或`EXISTS`来连接`student`和`sc`表。这里使用`INNER JOIN`的方法: ```sql SELECT DISTINCT s.sname FROM jxgl.student s INNER JOIN jxgl.sc sc ON s.sno...

    简单的SQL语句练习大全文.pdf

    使用EXISTS子句和INNER JOIN连接CARD和BORROW、BOOKS表: ```sql SELECT c.NAME, c.CLASS FROM CARD c WHERE EXISTS ( SELECT * FROM BORROW a INNER JOIN BOOKS b ON a.BNO = b.BNO WHERE b.BNAME = N'...

    SqlServer2000&2005数据库字典及表结构

    dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN dbo.sysobjects so ON so.name = si.name AND so....

    1704091029-蔡腾飞-数据库实验四.docx

    ### SQL 数据查询与视图知识点...- **分析和讨论**:在实验报告中要对实验过程中遇到的各种情况进行具体的分析和讨论。例如,对于嵌套查询和连接查询,可以从查询效率的角度进行比较;对于视图的操作,可以讨论哪些操作...

Global site tag (gtag.js) - Google Analytics