每日一个知识点-小表驱动大表 in 和 exists

在这里插入图片描述

每日一题

在这里插入图片描述

小表驱动大表优化

我们在数据库操作时,经常会使用 join 关键字,我们都知道 使用 join过程中要小表驱动大表,那么为什么要这么做呢

我们假设 A 表 有 10000条 数据 B表 有 5 条数据
在使用 join 查询时类似于如下操作

// A join B
for (10000) {
	for (5) {
	}
}

// B join A
for (5) {
	for (10000) {
	}
}

这样可以看出 当A join B 时 需要 10000 次表连接操作 , 而B join A 是 需要 5 次 表连接操作
所以, 小表驱动大表的主要目的是通过减少表连接创建的次数,加快查询速度.

in 和 exists

在使用 in 和 exists 关键字是 他们两个的执行计划是一样的,但是他们的执行机制是不同的 ,如果选择错误就会导致查询过慢

我们同样以上述 A 表 有 10000条 数据 B表 有 5 条数据 为例去展开

select * from A where b_id inselect id from B)

in 的子查询 是先执行 子查询 在执行主查询
上面的sql 操作可以理解为如下

// B join A
for (5) {
	for (10000) {
	}
}
select * from A where existsselect 1 from B where A.b_id = B.id)

exists 是先执行主查询在执行子查询
上面的sql 操作可以理解为如下

// B join A
for (10000) {
	for (5) {
	}
}

总结:
所以 in 的条件建议为小表 , exists 的 后面建议跟大表,也是小表驱动大表的思想,减少表连接的次数提高查询效率

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1999

每人一点点,明天会更好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值