mysql - Is querying with NOT IN faster then querying with IN? -


let's presume following simple situation:

i have 2 tables, category table contains 2 fields, categoryid, , categorygroup, , ads table contains 2 fields, adid, , category_categoryid link category table.

all rows in category table grouped in 2 separate groups: buy or rent. so, each row in table has in categorygroup either string buy or string rent.

let's want count how many ads have in ads sale.

i have 2 ways this:

  1. do not in query this: select count(adid) total ads category_categoryid not in (select categoryid category categorygroup = 'rent')

  2. or 'in' query this: select count(adid) total ads category_categoryid in (select categoryid category categorygroup = 'buy')

i've tested both queries, , seems me, not in query performs way faster in type of query.

(0.45 secs not in on table of ~900.000 rows, , around 45 categories, while 1.1 secs in on same dataset)

is incidental, or not in queries perform faster in simmilar situations?

in ( select ... ) , not in ( select ... ) perhaps never efficient way code something. 1 may faster other because select has fewer rows other, not because of not.

assuming ad in 1 category, efficient.

select  count(ads.adid) total, ads.categoryid      ads     join  category c on c.categoryid = ads.categoryid      c.categorygroup = 'buy'     group  ads.categoryid  

if ad can in multiple categories, have puzzle: should ad both 'buy' , 'rent' included or excluded count? anyway, leading replacing in exists alternative optimization:

select  count(adid) total, categoryid      ads      exists        ( select  *              category              categoryid = ads.categoryid               ,  categorygroup = 'buy'        )     group  categoryid  

(sorry, can't stand unnecessarily redundant column names category_categoryid.)

perform explain select ... on various choices more insight.


Comments

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

javascript - Get parameter of GET request -

javascript - Twitter Bootstrap - how to add some more margin between tooltip popup and element -