Freelancers Network
 
skill list top cap
Homepage
Join the Freelancer's Network
Update your details
Find a freelancer
Post a project
Find a project
Projects Archive
Post a job
Find a job
Jobs Archive
See Dan's Pages
See Andy's Pages
Link to this site
Resources
Join/Leave Forum
Forum Messages
+Additions+ Adverts
Advertising
Contact Us
Subscribe to our newsletter - enter your email address and hit return
Freelancers.net is owned and operated by Andy Stowell and Dan Winchester
skill list end cap
guru web hostcom

Find me again on Freelancers.net

Re: FN-FORUM: Sql query help

date posted 14th January 2004 10:11

> Yes that does seem to work although execution time is back up to 0.24
> seconds, because of the join I assume.

It's not so much the JOIN that is the problem as AFAIK the execution plan
for

> > > SELECT
> > > SUM( IF(i.barcode IS NULL,1,0) ) AS count,
> > > s.*
> > > FROM
> > > item AS i,
> > > supplier AS s
> > > WHERE
> > > i.id_supplier = s.id_supplier
> > > GROUP BY
> > > s.id

and

select count(p.id), s.* from supplier s
inner join products p on (p.supplier_id=s.supplier_id and p.barcode is null)
group by s.supplier_id

should be identical as the first contains a JOIN but just doesn't use the
JOIN syntax (if you see what I mean)

It's the LEFT OUTER JOIN/LEFT JOIN that is the problem. I'd be tempted to
play manually with the query first to see if you can get the execution time
down (although indexing the barcode field is something I'd try).

If you use this query

select count(p.id), s.* from supplier s
left outer join products p on (p.supplier_id=s.supplier_id and p.barcode is
null)
group by s.supplier_id

what happens if you
a) just select a single field from suppliers rather than all (i know this
isn't ultimately what you want, but i've found queries drop from 30s to
under a second by not getting more back than I need)
b) is there another check you can use for 'p.barcode is null' ? My brain is
under the impression that IS NULL has a performance hit (although it might
be MSSQL i'm remembering this from)
c) have you added any other selection criteria to the query (i.e. have you
put a WHERE clause on the end)

Andy




Messages by Day
January 31st 2004
January 30th 2004
January 29th 2004
January 28th 2004
January 27th 2004
January 26th 2004
January 25th 2004
January 24th 2004
January 23rd 2004
January 22nd 2004
January 21st 2004
January 20th 2004
January 19th 2004
January 18th 2004
January 17th 2004
January 16th 2004
January 15th 2004
January 14th 2004
January 13th 2004
January 12th 2004
January 11th 2004
January 10th 2004
January 9th 2004
January 8th 2004
January 7th 2004
January 6th 2004
January 5th 2004
January 4th 2004
January 3rd 2004
January 2nd 2004
January 1st 2004


Messages by Month
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004


Messages by Year
2008
2007
2006
2005
2004
2003
2002
2001
2000