weixin_46724576
2020-11-27 17:24
采纳率: 100%
浏览 50

在使用GBase 8a数据库时,有时使用not exists会导致sql耗时较长

在使用GBase 8a数据库时,有时使用not exists会导致sql耗时较长,且执行过程张产生大量的临时空间。not exists 需要两表关联,当关联字段不同值很少,表数据量较大,(表数据量2000多万,该列distinct值只有上百个),会导致产生大量临时文件。改成not in后效率有较大提高,但是需要加上关联字段不为空的条件。

select 1 
from D_METER d
WHERE t_METER_ID = d.METER_ID
AND NOT exists
(SELECT a.MR_DIGIT FROM C_METER_READ a
WHERE a.METER_ID = t_METER_ID
and d.METER_DIGITS=a.MR_DIGIT)

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 生命之源 0 2020-11-30 14:24
    已采纳

    建议您对sql进行改写:
    改后:
    select 1
           from D_METER d
           WHERE t_METER_ID = d.METER_ID
              AND d.METER_DIGITS NOT IN
                (SELECT a.MR_DIGIT
                FROM C_METER_READ a
                WHERE a.METER_ID = t_METER_ID
                 AND a.MR_DIGIT IS NOT NULL)

    h2.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题