select a.*,
      (case when a.col1 like '%?%'
        then ? else ?) as score1,
      (case when a.col2 like '%?%'
        then ? else ?) as score2,
      (case when a.col3 like '%?%'
        then ? else ?) as score3,
           .....
           .....
      (case when a.col12 like '%?%'
        then ? else ?) as score12from A a
order by (score1+score2+.......score12)?是动态传入的值,由页面输入。如何优化这条sql。我怎么都觉得没什么可能。但是需求还不能变,无奈啊。
是不是需要改变算法。求大神。

解决方案 »

  1.   

    无索引,like语句,有点坑爹啊,里面有BLOB字段么?我先想想!
      

  2.   

    这种sql没法用索引!其实我从一开始就是觉得不可能实现的,10万条怎么也要20分钟吧。
    可是技术这东西说不准,可能有些东西我不知道。各位高手帮忙想想看吧。
      

  3.   

    你这语句不可能吧,前面是a.*
    那你后面没写group by,就算有group by,你是按a.*分组???
      

  4.   

    测试一下,查询的时候,去掉Case When,取出结果,在内存中对DataSet进行处理。
      

  5.   

    sql没错啊,a.*和group by有什么关系?你搞错了吧
      

  6.   

    内存中对DataSet进行处理。。是指在存储过程中吗?
      

  7.   

    你直接order by decode()試試看