Only if you want to see duplicate rows :-)

On Tue, Aug 17, 2010 at 2:21 PM, Ananda Kumar <anan...@gmail.com> wrote:

> use UNION ALL ..instead of UNION for better performance...
>
> On Tue, Aug 17, 2010 at 5:01 PM, Johan De Meersman <vegiv...@tuxera.be
> >wrote:
>
> > You may want to split of your or conditions into a separate query, and
> use
> > UNION.
> >
> > On Tue, Aug 17, 2010 at 11:22 AM, Влад Р <vul...@gmail.com> wrote:
> >
> > > The main problem - if add in Join on `OR`-condition, select become
> > > VERY slow. I realy
> > > have to use this condition.
> > >
> > > -- --------------------------------------------------------
> > > --
> > > -- `tree_data`
> > > --
> > >
> > > CREATE TABLE IF NOT EXISTS `tree_data` (
> > >  `id` int(11) NOT NULL AUTO_INCREMENT,
> > >  `pid` int(11) NOT NULL,
> > >  PRIMARY KEY (`id`),
> > > ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=869 ;
> > >
> > > testiong on 800 rows
> > >
> > > Simple tree join query
> > > First QUERY is:
> > >
> > > SELECT
> > > `l0`.`id` AS  'l0id',
> > > `l0`.`pid` AS  `l0pid` ,
> > > `l1`.`id` AS  'l1id',
> > > `l1`.`pid` AS  `l1pid` ,
> > > `l2`.`id` AS  'l2id',
> > > `l2`.`pid` AS  `l2pid` ,
> > > `l3`.`id` AS  'l3id',
> > > `l3`.`pid` AS  `l3pid` ,
> > > `l4`.`id` AS  'l4id',
> > > `l4`.`pid` AS  `l4pid`
> > > FROM  `tree_data` AS  `l0`
> > > LEFT JOIN `tree_data` as `l1` on (`l1`.`pid`=`l0`.`id`)
> > > LEFT JOIN `tree_data` as `l2` on (`l2`.`pid`=`l1`.`id`)
> > > LEFT JOIN `tree_data` as `l3` on (`l3`.`pid`=`l2`.`id`)
> > > LEFT JOIN `tree_data` as `l4` on (`l4`.`pid`=`l3`.`id`)
> > > WHERE  `l0`.`pid` =0
> > >
> > > id      select_type     table   type    possible_keys   key     key_len
> > ref
> > >     rows    Extra
> > > 1       SIMPLE  l0      ref     pid     pid     4       const   4
> > > 1       SIMPLE  l1      ref     pid     pid     4       test.l0.id
> >  9
> > > 1       SIMPLE  l2      ref     pid     pid     4       test.l1.id
> >  9
> > > 1       SIMPLE  l3      ref     pid     pid     4       test.l2.id
> >  9
> > > 1       SIMPLE  l4      ref     pid     pid     4       test.l3.id
> >  9
> > >
> > > time execution is 0.0069.  result 207 rows
> > >
> > > looking at other query
> > >
> > > SELECT
> > > `l0`.`id` AS  'l0id',
> > > `l0`.`pid` AS  `l0pid` ,
> > > `l1`.`id` AS  'l1id',
> > > `l1`.`pid` AS  `l1pid` ,
> > > `l2`.`id` AS  'l2id',
> > > `l2`.`pid` AS  `l2pid` ,
> > > `l3`.`id` AS  'l3id',
> > > `l3`.`pid` AS  `l3pid` ,
> > > `l4`.`id` AS  'l4id',
> > > `l4`.`pid` AS  `l4pid`
> > > FROM  `tree_data` AS  `l0`
> > > LEFT JOIN `tree_data` as `l1` on (`l1`.`pid`=`l0`.`id` or
> `l1`.`pid`=100)
> > > LEFT JOIN `tree_data` as `l2` on (`l2`.`pid`=`l1`.`id` or
> `l2`.`pid`=200)
> > > LEFT JOIN `tree_data` as `l3` on (`l3`.`pid`=`l2`.`id` or
> `l3`.`pid`=300)
> > > LEFT JOIN `tree_data` as `l4` on (`l4`.`pid`=`l3`.`id` or
> `l4`.`pid`=400)
> > > WHERE  `l0`.`pid` =0
> > >
> > > And now execution time is 0.1455!!!
> > > profiling gives: Sending data   0.137295
> > > And analize:
> > > id  select_type table   type  possible_keys     key     key_len ref
> > > rows    Extr
> > > 1       SIMPLE  l0      ref     pid     pid     4       const   4
> > > 1       SIMPLE  l1      ALL     pid     NULL    NULL    NULL    800
> > > 1       SIMPLE  l2      ALL     pid     NULL    NULL    NULL    800
> > > 1       SIMPLE  l3      ALL     pid     NULL    NULL    NULL    800
> > > 1       SIMPLE  l4      ALL     pid     NULL    NULL    NULL    800
> > >
> > > And what will happen if there will be 10000 rows?
> > >
> > > (In real i using this `or` condition for selecting to the tree nodes
> > > for current element id and id can be id from other nodes.)
> > >
> >
> >
> >
> > --
> > Bier met grenadyn
> > Is als mosterd by den wyn
> > Sy die't drinkt, is eene kwezel
> > Hy die't drinkt, is ras een ezel
> >
>



-- 
Bier met grenadyn
Is als mosterd by den wyn
Sy die't drinkt, is eene kwezel
Hy die't drinkt, is ras een ezel

Reply via email to