应用场景:
最近做了一个医院的客服系统,需要和医院his系统对接,从his系统中读取患者数据,医院his系统提供了一个患者视图给客服系统使用(有id,name,age。。以及其他的一些患者字段),his系统使用的是oracle数据库。客服系统需要实现功能:客服系统根据his系统的患者视图做了一个患者列表展示,每天会有人员对患者进行回访记录,回访过后会在客服系统数据库中记录患者id,name以及回访时间,回访内容。。等字段,现在客服系统需要在患者列表将所有“未回访“的患者搜索出来,(未回访的指的是在客服系统中没有添加过回访记录的患者),如果用where not in (已回访的患者id) 效率太低了 求一个比较好的sql优化或者其他方式的解决方案。备注①:医院his系统不会做任何的接口或者数据库修改。
备注②:医院his系统的患者数据是过百万的,并且是在不断变更的,暂不考虑写程序一直更新同步数据到客服系统,客服系统中现在记录的已经回访过的患者大概有3万条数据。 

解决方案 »

  1.   

    既然 数据库中记录患者id,name以及回访时间回访内容
    那么 未回访不就是 回访时间 或 回访内容 为空吗?
    怎么可能会想到 in (已回访的患者id)
      

  2.   

    感谢1楼的话单,但是我的问题是 :回访记录的内容 id,name,回访时间和回访内容,都是记录在客服系统数据库中的,并未记录到his数据库中,但是我患者数据又是读的his系统视图
      

  3.   

    既然是 回访并未记录到his数据库中,那么你的 not in (已回访的患者id) 不也是纸上谈兵吗?
      

  4.   

    我将未回访的存过来 然后进行同步也考虑过,但是如果his系统进行进行数据删除。。或者他的视图筛选条件变了导致视图数据变了,我也不好处理啊。。至于怎么使用where not (已回访的id),由于已回访过的id,我在客服系统都有记录,是可以获取到的啊,取出来后对his系统视图查询时使用,但是这个效率肯定是不行
      

  5.   

    好纠结啊,拖着都不能验收,客服这边非要这个功能,第三方his系统又不愿意配合,都要和他们吵起来了,第三方his系统程序员说这个查询sql自己想办法优化下就行了,很简单的。。我能力有限 实在不知道咋解决,求大神给方案啊!!
      

  6.   

    回访记录在客服系统数据库中的,并未记录到his数据库中。
    你只能操作his数据库,可否客服系统数据库的记录写入redis,然后你调用呢?
      

  7.   

    假定你的 已回访过的id 被记录在你的系统的数据库中
    那么你定时从 his系统中读取患者数据 也写到的数据库中
    这样对比不就都在你的数据库中进行了吗?
      

  8.   

    用exists试试