0

私はこのようなSQLを持っています:

select t1.id,t1.type from collect t1 
 where t1.type='1' and t1.status='1' 
    and t1.total>(t1.totalComplate+t1.totalIng)  
    and id not in(
             select tid from collect_log t2 
              where t2.tid=t1.id and t2.bid='1146') 
limit 1;

それは問題ありませんが、そのパフォーマンスはあまり良くないようで、注文コマンドを使用すると:

select t1.id,t1.type from collect t1 
 where t1.type='1' and t1.status='1' 
    and t1.total>(t1.totalComplate+t1.totalIng)  
    and id not in(
             select tid from collect_log t2 
              where t2.tid=t1.id and t2.bid='1146') 
order by t1.id asc 
limit 1;

それはさらに悪化します。どうすればこれを最適化できますか?

ここに説明があります:

id | select_type        | table | type | possible_keys | key | key_len | ref             | rows | Extra                       |
+----+--------------------+-------+------+---------------+-----+---------+-----------------+------+-----------------------------+
|  1 | PRIMARY            | t1    | ref  | i2,i1,i3      | i1  | 4       | const,const     |   99 | Using where; Using filesort |
|  2 | DEPENDENT SUBQUERY | t2    | ref  | i5            | i5  | 65      | img.t1.id,const |    2 | Using where; Using index 
4

2 に答える 2