小表驱动大表
小表驱动大表,即小的数据集驱动大得数据集
类似嵌套循环
for(int i = 5; .......) { for(int j = 1000; ......) {} }
如果小的循环在外层,对于数据库连接来说就只连接 5 次,进行 1000 次操作,如果 1000 在外,则需要进行 1000 次数据库连接,从而浪费资源,增加消耗。这就是为什么要小表驱动大表
in 与 exists
exists 可以替代 in
in
exists
in 与 exists 选择
- 当 A 表中数据多于 B 表中的数据时,这时我们使用 IN 优于 EXISTS
- 当 B 表中数据多于 A 表中的数据时,这时我们使用 EXISTS 优于 IN
- 因此是使用 IN 还是使用 EXISTS 就需要根据我们的需求决定了。但是如果两张表中的数据量差不多时那么是使用 IN 还是使用 EXISTS 差别不大
- EXISTS 子查询只返回 TRUE 或 FALSE,因此子查询中的 SELECT * 可以是 SELECT 1 或者其他