小编jca*_*314的帖子

根据 SQL92 规范,我可以将值 1 存储在精度 = 比例的字段中吗?

将数字 1 存储在定义为的字段中是否符合 SQL92 NUMERIC 3,3

关于什么 DECIMAL 3,3

这是否意味着精度是浮动小数位或静态的,即使它们都为零也必须有 3 个小数位?

datatypes sql-standard decimal

4
推荐指数
1
解决办法
155
查看次数

使用 WHERE NOT IN 子选择子句提高性能

在以下查询中,我必须为每个客户计算交易。但是,我必须从结果集中完全排除交易时间超过一年的客户。

查询优化器不应该足够聪明,只为每个客户评估一次存在吗?

--Count transactions on customers that are less than 1 year old

SELECT t1.CUSTID, COUNT(*)
FROM CUST_TRX t1
WHERE NOT EXISTS ( 
  SELECT FIRST 1 1 
  FROM CUST_TRX t2 
  WHERE 
    t2.CUSTID = t1.CUSTID AND
    t2.DATED < CURRENT_DATE - 365
  GROUP BY t2.CUSTID
)
GROUP BY t1.CUSTID
Run Code Online (Sandbox Code Playgroud)

我的查询计划中没有自然。此查询的执行就像数据库为每个事务运行存在子句,而不是为每个客户运行它。如果我删除GROUP BY子查询中的,则性能相同。

有没有更好的方法来做到这一点,以便我可以从数据库中获得更好的性能?SELECT如果可能的话,希望一个简单的查询能够避免 CTE(这会带来其他挑战)。

由于其他GROUP BY条件(此处未显示),我无法简单地检查MIN(DATED),我确实需要执行另一个查询。

performance execution-plan subquery firebird query-performance

4
推荐指数
1
解决办法
7679
查看次数