表结构:3个字段
task_id guid task_status
其中task_id为key
查询语句:
select task_id from tab_task where guid not in (select guid from tab_task where task_status in(1,2));
子查询再加上not in, 速度实在是太慢了,请教该如何优化?

解决方案 »

  1.   


    select task_id from tab_task where task_status<>1 and task_status<>2;
      

  2.   

    在guid上建立索引
    select a.task_id from tab_task a from tab_task b 
    on a.guid=b.guid where b.guid is null and b.task_status in(1,2)
      

  3.   

    1楼的,谢谢你的回答,不过你的回答与原来的sql语句作用不同。原来的sql语句作用是:1.选择出task_id
    2.与选择出的task具有相同的guid的task没有task_status为1或者2的可能字段名字用guid会让大家误解,不过多个task是可以有相同的guid的
      

  4.   

    在guid上建立索引
    select a.task_id from tab_task a INNER JOIN tab_task b  
    on a.guid=b.guid where b.guid is null and b.task_status in(1,2)
      

  5.   

    4楼的,如果子查询中没有where task_status in(1,2),你那样优化是完美的,可惜如果子查询有限制条件的话那样优化是错误的,想想吧,你那样查询出来的结果会一直是空的
      

  6.   

    SELECT a.* FROM tab_task a LEFT JOIN tab_task b   
    ON a.guid=b.guid AND b.task_status IN(1,2) WHERE b.guid IS null将INNER JOIN->LEFT JOIN
    笔误