我在一条sql语句里有in,也有like,执行速度比较慢,很头痛,对于这种又有in,又有like的,怎么办,大家都知道,有了like,索引失效,但我的语句里,又没有办法不用到in和like ,怎么办?
还有一个问题
SELECT     zc_id,pc_id,pl_id
FROM         zcxx inner join pcxx on pc_id=zc_pcid inner join plandd on pl_id=zc_plid,像这样的,这个排序是按哪个排序的,zc_id,pc_id,pl_id,我发现这条语句的排序,并非这三个,真是奇怪死了,这zc_id,pc_id,pl_id三个,都是zcxx,pcxx,plandd的索引ID及主键

解决方案 »

  1.   

    可以使用left  join 和 not exists代替
      

  2.   

    我在一条sql语句里有in,也有like,执行速度比较慢,很头痛,对于这种又有in,又有like的,怎么办,大家都知道,有了like,索引失效,但我的语句里,又没有办法不用到in和like ,怎么办?有了LIKE不一定失效
      

  3.   

    后面加下order by 不行吗
      

  4.   

    SELECT    zc_id,pc_id,pl_id 
    FROM        zcxx inner join pcxx on pc_id=zc_pcid inner join plandd on pl_id=zc_plid这是连接条件,不是排序吧
      

  5.   

    给表格定义和测试数据至于需要like的,也要用,难道为了效率就这样舍弃它
      

  6.   


    确实是连接,不是排序,但是为什么连接后的顺序不是按这三个的其中一个呢?我想,如果select zc_id from zcxx 这样的话,至少是按zc_id的这个顺序的吧,出来应该是12345,而不是13245吧
      

  7.   


    其实,in和exists的效率,都讲不清谁与谁高
    select *from pcxx where pc_id in (select zc_pcid zcxx where sql)select *from pcxx where exists (select 1 from zcxx where zc_pcid=pc_id)
    以上两个效率怎么比较?其中,pc_id是主键,而zc_pcid=pc_id
      

  8.   

    EXISTS效率要高点,能用到索引,如果有索引的话