[kdepim-users] akonadi fsck fails

J. Roeleveld joost at antarean.org
Wed Aug 26 20:34:14 BST 2015


On Wednesday, August 26, 2015 09:19:58 PM J. Roeleveld wrote:
> On Wednesday, August 26, 2015 07:01:48 PM J. Roeleveld wrote:
> > On 26 August 2015 18:45:27 CEST, Pablo Sanchez <pablo at blueoakdb.com> 
wrote:
> > >[ Comments below, in-line ]
> > >
> > >On 08/26/2015 12:23 PM, J. Roeleveld wrote:
> > >>>     DELETE FROM pimitemflagrelation
> > >>>     
> > >>> >                LEFT JOIN pimitemtable
> > >>> >                
> > >>> >                   ON pimitemflagrelation.pimitem_id =
> > >
> > >pimitemtable.id
> > >
> > >>> >    WHERE  pimitemtable.id IS NULL;
> > >>> >
> > >>> >I'm not sure whether MySQL supports a LEFT JOIN in the DELETE but
> > >
> > >you
> > >
> > >>> >should be able to give it a whirl.  :)
> > >> 
> > >> Personally, I don't care about MySQL. So someone who uses that will
> > >
> > >need to test it.
> > >
> > >> Can that be easily built using QueryBuilder?
> > >> 
> > >> I will try this week (end) and get back on this.
> > >> 
> > >> --
> > >> Joost
> > >
> > >Hi Joost,
> > >
> > >Are you using Postgres?  If so, once it works, please try running an
> > >EXPLAIN and send me the output.  We can see what PG thinks.
> > >
> > >What would be awesome is if you ran an EXPLAIN, saved the results, then
> > >
> > >run an ANALYZE on the two objects: [pimitemflagrelation] and
> > >[pimitemtable].  Then re-do the EXPLAIN.
> > 
> > Yes, running a standalone server. Found that performs better compared to
> > running it started by akonadi. Also means I only run 1 instance. (Use that
> > for development work as well)
> > 
> > I will do the explains later today or tomorrow. Don't have my laptop with
> > me atm.
> > 
> > --
> > Joost
> 
> Ok, the results are as attached.
> (Copied directly from my psql-session)
> 
> The one with the LEFT JOIN doesn't work.
> 
> For the other ones, there is, in the plan, a big difference between the two.
> Just like you said in your original email.
> 
> Based on that, the following one is the best option:
> ++++
> delete from pimitemflagrelation
>  where pimitemflagrelation.pimitem_id in (
>            select pimitem_id
>            from pimitemflagrelation
>            left join pimitemtable
>              on pimitemflagrelation.pimitem_id = pimitemtable.id);
> ++++
> 
> As for splitting it all up. If it has to be in a single transaction, how do
> I start a transaction using the objects present?
> I usually write the query into the code and send that to the database. I'm
> not familiar with the querybuilder objects being used in akonadi.
> 
> Is there a direct link to some documentation about those?
> 
> Kind regards,
> 
> Joost Roeleveld

Actually, rereading the results, the "where not exist" is the one with the 
lowest total cost: 78179.02

The other one has: 244683.55

The subselect causes a temp-table (materialize) to be created.

--
Joost
_______________________________________________
KDE PIM users mailing list
Subscription management: https://mail.kde.org/mailman/listinfo/kdepim-users


More information about the kdepim-users mailing list