您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

与具有几百万行的表上的``=''相比,SQL Server`` <>''运算符非常慢

与具有几百万行的表上的``=''相比,SQL Server`` <>''运算符非常慢

因为=将连接操作从每个表减少到一个匹配行(假定这些docid是唯一的)。

这样想吧-您跳了5个男孩和5个女孩的舞蹈:

Adam      Alice
Bob       Betty
Charly    Cathy
Dick      Deb
Evan      Elly

您用第一个字母将它们配对。所以

Adam->Alice
Bob->Betty
etc...

一对配对

但是,如果您通过“首字母不匹配”将它们配对,则会得到以下结果:

Adam->Betty
Adam->Cathy
Adam->Deb
Adam->Elly
Bob->Alice
etc...

您已经大大增加了配对的数量。这就是为什么您的<>查询需要这么长时间的原因。实际上,您实际上是在尝试获取m x n行,而不是min(m,n)。使用此数据,您最终得到25行,而不是5行。对于您指定的表大小,您正在处理77,000 * 2,700,000 = 2079亿行,减去两个ID匹配的77,000,总共207,899,923,000行联接的数据集。

根据您的查询要求,尝试左连接并查找空的右侧记录:

SELECT DISTINCT logs.DOCID
FROM logs
LEFT JOIN forms ON logs.DOCID = forms.DOCID
WHERE forms.DOCID IS NULL
SQLServer 2022/1/1 18:48:33 有340人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶