不使用IN语句重新设计查询

S S*_*S S 2 mysql sql

我有一个如下查询.此查询工作正常,但由于我需要检查大量数据,因此运行此查询的速度较慢.

任何人都可以帮我如何优化这个查询?

SELECT * from trn where concat(comp_id,cus_id) 
IN (select concat(comp_id,cus_id) FROM cus where sid='A0001') 
AND docdate between ('2018-01-01') and ('2018-04-30')
Run Code Online (Sandbox Code Playgroud)

dno*_*eth 5

concat可能会导致这些性能问题,因为它无法使用索引.

但MySQL支持多列子查询,因此只需删除它:

SELECT * from trn 
where (comp_id,cus_id) IN 
        ( select comp_id,cus_id
          FROM cus 
          where sid='A0001'
        ) 
  AND docdate between ('2018-01-01') and ('2018-04-30')
Run Code Online (Sandbox Code Playgroud)