CrossMotion Posted May 15, 2013 Share Posted May 15, 2013 I have a simple SQL query with a group by subquery that runs on a table with 3000 records. It takes aboud 2 minutes to run the code in PHPmyadmin. Is there a way to speed this up? SELECT partnumber, product_id FROM products WHERE partnumber IN ( SELECT partnumber FROM products GROUP BY partnumber HAVING count(*) > 1 ) ORDER BY partnumber; Quote Link to comment Share on other sites More sharing options...
Solution Barand Posted May 15, 2013 Solution Share Posted May 15, 2013 (edited) try SELECT partnumber, product_id FROM products JOIN ( SELECT partnumber FROM products GROUP BY partnumber HAVING count(*) > 1 ) as counts USING (partnumber) ORDER BY partnumber; PS Do you have an index on partnumber? Edited May 15, 2013 by Barand Quote Link to comment Share on other sites More sharing options...
CrossMotion Posted May 16, 2013 Author Share Posted May 16, 2013 Thank you Barand for your input. It tuns out I did not have a index on that field yet. I added it, boosting performance to 15 seconds. Then I tried your query, which runs in 0.0002 sec . Thx again!. Quote Link to comment Share on other sites More sharing options...
Barand Posted May 16, 2013 Share Posted May 16, 2013 Sounds like a result!. If you run an EXPLAIN on your original query you will, no doubt, see the words DEPENDENT SUBQUERY. That means the query is being called for every row. With a "table subquery" like mine it is is called once. Quote Link to comment Share on other sites More sharing options...
CrossMotion Posted May 16, 2013 Author Share Posted May 16, 2013 Hmm so in fact I was running 3004 query’s instead of one. That explains a lot . Thanks for your clear and verry usefull explanation. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.