如何有效地从一个表中选择另一表中不存在的行?

DDD
发布: 2024-10-26 11:49:29
原创
685 人浏览过

 How to Efficiently Select Rows from One Table that Are Not Present in Another Table?

MySQL 选择另一个表中不存在的行

共享公共主表时获取表 A 中存在但不存在于表 B 中的所有行键,有几种方法可用,但性能影响各不相同。

使用带有 NOT EXISTS 的子查询:

使用 NOT EXISTS 的子查询的初始方法是可行的选项,但可能相对较慢,尤其是对于较大的数据集。

使用左联接:

正如您所发现的,左联接可以执行得更快。在共享列上连接表 A 和表 B 时,表 A 中与表 B 中任何行都不匹配的行在连接列中将具有 NULL 值。过滤这些 NULL 值可以有效地隔离所需的行。

代码示例:

<code class="sql">SELECT *
FROM A
LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL;</code>
登录后复制

其他提示:

  • 确保两个表的连接列上有正确的索引。
  • 在表 B 上使用覆盖索引来减少磁盘读取次数。
  • 考虑使用带有负过滤器的 UNION 查询显式排除表 B 中的行。

总体结论:

虽然左连接方法通常优于子查询方法,但最佳解决方案可能会有所不同,具体取决于具体的数据集和模式。建议进行实验和性能测试,以确定每种情况下最有效的方法。

以上是如何有效地从一个表中选择另一表中不存在的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!