weixin_46724576 2020-11-27 17:24 采纳率: 100%
浏览 63
已结题

在使用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条回答 默认 最新

  • 生命之源; 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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日