在查询中使用 EXCEPT 时出现 SQL Server 性能问题

标签 sql sql-server union except

一般来说,我有一个 SELECT 查询结合三个独立的 SELECT 查询。我在查询中使用了 EXCEPTUNION 运算符。独立执行查询时,我会在 1-2 秒内收到结果,但是当使用 EXCEPT 运算符时,查询将花费数小时。

查询结构(简化后)如下:

SELECT DISTINCT FIELD_1, FIELD_2, FIELD_3 FROM MYTABLE

EXCEPT

(
SELECT DISTINCT FIELD_1, FIELD_2, FIELD_3 FROM MYTABLE WHERE XXX

UNION

SELECT DISTINCT FIELD_1, FIELD_2, FIELD_3 FROM MYTABLE WHERE YYY
)

是否有任何方法可以加快整个查询的速度,或者 EXCEPT 运算符是否通常太慢以至于应该避免?

最佳答案

您可以使用 GROUP BY

SELECT FIELD_1, FIELD_2, FIELD_3 
FROM MYTABLE
GROUP BY FIELD_1, FIELD_2, FIELD_3 
HAVING MAX(CASE WHEN (XXX) OR (YYY) THEN 1 ELSE 0 END) = 0

关于在查询中使用 EXCEPT 时出现 SQL Server 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54594581/

相关文章:

sql - 从 SQL 中划分结果时出错

sql - LIKE 语句中的 4000 个字符限制

mysql - 如何比较在数据库中存储为 String(varchar) 的日期?

MySQL:在一条语句中合并 2 列的结果

MySQL 将多个表中的行组合成一行

sql - 在sql Server中从单列转换为多列

mysql - 按重复顺序排序,顶部优先,有限制

php - 使用 PostgreSQL 和 PHP 获取查询结果

sql where 子句查询

MySql - 跨不同服务器的联合