sql - SQL 查询“未加入”与“加入”
问题描述
NOT IN 与使用 JOIN
SELECT COUNT(*)
FROM TBL_A AS A
WHERE A.MailDatId = 185208
AND SUBSTRING(A.PIMBRecord,3,3) NOT IN (SELECT B.ServiceTypeId FROM TBL_B AS B WHERE B.IsStandard = 1);
SELECT COUNT(*) FROM TBL_A AS A
LEFT JOIN (SELECT B.ServiceTypeId FROM TBL_B AS B WHERE B.IsStandard = 1) C
ON SUBSTRING(A.PIMBRecord,3,3) = C.ServiceTypeId
WHERE A.MailDatId = 185208
and C.ServiceTypeId IS NULL
上面我有两个查询,哪一个更高效?另外如何测试sql server中查询的效率?
解决方案
我实际上会推荐not exists
这个:
select count(*)
from tbl_a a
where
a.mailDatId =
and not exists (
select 1
from tbl_b as b
where b.isStandard = 1 and b.serviceTypeId = substring(a.PIMBRecord,3,3)
)
理由:
NOT IN
不是空安全的,NOT EXISTS
而是JOIN
当您想从另一个表返回某些东西时,s 通常更适合用例 - 这里不是这种情况
为了性能,您需要一个索引tbl_b(serviceTypeId, isStandard)
推荐阅读
- php - 如何将关联数组中键的值递增为字符串
- python-3.x - 由于条件,在时间序列图上绘制一条垂直线
- kotlin - 使用用户输入填充 Kotlin 中的类
- c - 具有两个条件的二叉搜索树
- amazon-web-services - aws ) 未定义符号:TLS_client_method
- openssl - 为什么在 netty-tcnative 中没有卸载 certificateVerifierTask_class
- python - 如何在 ctypes 中设置任意大小的数组?
- angular - 如何为操作列 ng2-smart-table 添加工具提示
- mysql - 在 MySQL 中使用存储过程的 Django 表单
- java - 搜索两个不同链表之间的差异