是这样的
A表:用户表 B表:申请表B表中有个APPLICANT_IDS字段保存的是用户表的ID连起来的字符串,如 ,1,2,3, 或者 ,3,4,5,我现在想做的是通过关联A和B两个表 ,统计每个用户总共出现在在B表的APPLICANT_IDS多少次我本来的做法是SELECT
JZXX.SYS_USER.USERID,
JZXX.T_APPLY.STU_YEAR_ID,
COUNT(JZXX.T_APPLY.ID) AS COUNT_APPLY
FROM
JZXX.T_APPLY ,
JZXX.SYS_USER
WHERE
','||T_APPLY.APPLICANT_IDS||',' LIKE '%,'||SYS_USER.USERID||',%'
GROUP BY
JZXX.SYS_USER.USERID,
JZXX.T_APPLY.STU_YEAR_ID
但这样用Like查询做得非常的慢,要个6到7秒,A表只有2W条数据左右,B表有400多条。请大家指导下,可以如何改进?

解决方案 »

  1.   

    1。两表连接没有条件的?迪卡尔集不慢才怪
    2。like 是无法使用索引的,肯定也慢
      

  2.   

    我刚才比较了,用instr和like在未建索引的字段进行比较的话,都是table access full
      

  3.   

    instr()函数 ,判断其返回值 
      

  4.   

    谢谢LS,用了instr(),效果也好像差不多,是不是还有其他需要添加或者优化的?
    数据库不是很熟悉。
      

  5.   

    用instr()函数不是差不多,而是差很多的。具体的可以看一下执行计划。