sql - 选择查询所需的性能

标签 sql performance select optimization informix

考虑以下 Table_A 和 Table_B:

Table_A
ID  |A_Field_1
1   |10
2   |11
3   |12

表_B:

ID  |B_Field_1
1   |500
1   |510
1   |520
2   |550
3   |530

我需要编写一个查询,以获取 Table_B 中没有 的值的 IDA_Field_1 B_Field_1 值为 520 或 530。

输出:

ID  |A_FIELD_1
2   |11

我当前的查询如下:

SELECT ID,A_Field_1 
from Table_A
where ID not in (select ID from Table_B where B_Field_1 in (520,530))

这可行,但有人可以提供更好的基于性能的查询吗?如上面的查询所示,select ID from Table_B where B_Field_1 in (520,530) 内部查询很大并且对应于不断增长的表。

最佳答案

你也可以这样尝试

SELECT
      Id
    , A_Field_1
FROM TABLE_A A
INNER JOIN
(
     SELECT
           Id
         , COUNT(CASE WHEN B_Field_1 IN (520, 530) THEN 1 END) AS ValidId
     FROM Table_B
     GROUP BY Id
) b ON A.Id = b.Id AND b.ValidId < 1

关于sql - 选择查询所需的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397972/

相关文章:

mysql - 不加入时 SQL 性能受到影响

mysql - 在 MySQL 中,我可以在 INSERT 上下文中使用 IF 吗?

mysql - SQL Server - 返回 null 的 SELECT 语句

scala - 为什么这个 scala 素数生成如此慢/内存密集?

mysql - 从 MySQL 中的每个 'group by' 类别中检索任意数量的随机行

SQL Server 按最接近零的值排序

SQL 替换结果中的逗号而不使用替换

java - sun.misc.Perf 文档或替代品

java - (TeeChart - Java) 评估版性能问题

mysql - 可以识别不同值和最大值的 SQL 查询