Can you send us a new explain on this version?

Donny

> -----Original Message-----
> From: karthik viswanathan [mailto:[EMAIL PROTECTED]
> Sent: Sunday, February 29, 2004 4:12 PM
> To: [EMAIL PROTECTED]
> Subject: Re: optimizing a select statement over a database with >50
> million recs
> 
> here is the updated select statement i came with but still needs
> improvement
> 
> SELECT Distinct (a.id)
> From table1 a
> INNER JOIN table1 b
> USING ( p_id )
> INNER JOIN table2 c
> USING ( p_id )
> INNER JOIN table3 d
> USING ( out_id )
> INNER JOIN table4 e ON ( d.name_id = e.name_id )
> INNER JOIN table4 f  ON ( e.start_id
> BETWEEN f.left_id AND f.end_id )
> WHERE (f.name_id =45 OR f.name_id =56)
> AND b.id =275 AND a.id != b.id
> 
> This reduced the time from 0.5 secs to 0.3 secs but still i am looking for
> some major
> improvemnts. I am using this query in PHP and its been repeated several
> times to
> display a list. Any advice on this will be really useful. Is there
> anything I could
> do with the mysql and php configuration to increase the performance? The
> server has
> just 1GB ram, will adding more memory help?
> 
> Thanks
> Karthik.
> 
> > Need help on optimizing the select statement:
> >
> > Table structure
> >
> > table1
> > ------
> > id
> > p_id
> >
> > table2
> > ------
> > p_id
> > out_id
> >
> > table3
> > ------
> > out_id
> > name_id
> >
> > table4
> > -------
> > name_id (unique)
> > prev_id
> > start_id (unique)
> > end_id (unique)
> >
> > Only table4 has unique fields all other fields are not unique.
> >
> > The following select statement does what is required but the tables are
> really
> > huge
> > (> 50 million records) so need to be optimized
> >
> > SELECT DISTINCT (a.id)
> > FROM table1 a, table1 b, table2 c, table3 d, table4 e, table4 f
> > WHERE a.id =275 AND a.p_id = b.p_id AND a.id != b.id
> >   AND a.p_id = c.p_id AND c.out_id = d.out_id AND d.name_id = e.name_id
> >   AND e.start_id >= f.start_id AND e.end_id <= f.end_id AND e.end_id !=0
> >   AND (f.name_id =45 OR f.name_id =56)
> > GROUP BY b.id
> >
> > The explain for the above statement is
> >
> > a | ref | id,p_id,combine | combine | 4 | const | 5281 | Using where;
> Using
> > index;
> > Using temporary; Using f...
> > c | eq_ref | PRIMARY,p_id | PRIMARY | 4 | a.p_id | 1 |  |  |
> > d | ref | name_id,out_id | out_id | 4 | b.out_id | 1 |  |  |
> > b | ref | p_id | p_id | 4 | a.p_id | 3 | Using where |
> > e | range | PRIMARY,start_id,end_id,combine,name_id | PRIMARY | 4 | NULL
> | 2 |
> > Using
> > where |
> > f | eq_ref | PRIMARY,start_id,end_id,combine,name_id | PRIMARY | 4 |
> c.name_id |
> 
> > 1 |
> > Using where |
> >
> > I am sure there should be some better way to do this using Inner join or
> > something
> > similar but I am not sure how. It will be helpful if you could suggest
> me some
> > improvements for this query. If you need any further explanation please
> let me
> > know.
> >
> > Thanks for your help
> > Karu.
> >
> >
> >
> > --
> > MySQL General Mailing List
> > For list archives: http://lists.mysql.com/mysql
> > To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
> >
> 
> 
> 
> 
> 
> 
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
> http://lists.mysql.com/[EMAIL PROTECTED]
> 




-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to