mysql - How efficiently check record exist more than 2 times in table using sub-query? -
i have query . have compound index cc.key1,cc.key2. executing in big database
select * cc ( ( (select count(*) service s cc.key1=s.sr2 , cc.key2=s.sr1) > 2 , cc.key3='new' ) or ( (select count(*) service s cc.key1=s.sr2 , cc.key2=s.sr1) <= 2 ) ) limit 10000; i tried make inner join , getting slower . how can optimize query ?
the trick here being able articulate query problem:
select * cc t1 inner join ( select cc.key1, cc.key2 cc cc left join service s on cc.key1 = s.sr2 , cc.key2 = s.sr1 group cc.key1, cc.key2 having count(*) <= 2 or sum(case when cc.key = 'new' 1 else 0 end) > 2 ) t2 on t1.key1 = t2.key1 , t1.key2 = t2.key2 explanation:
your original 2 subqueries add count if given record in cc, given key1 , key2 value, matched corresponding record in service table. strategy behind inner query use group by count number of times happens, , use instead of subqueries. first count condition bottom subquery, , second 1 top.
the inner query finds key1, key2 pairs in cc corresponding records should retained. , recognize these 2 columns criteria in original query determining whether record cc gets retained. then, inner query can inner joined cc again final result set.
in terms of performance, answer leave desired, should better massive correlated subquery, had.
Comments
Post a Comment