Hi Igor,

I'm working on providing those data, meanwhile I have to emphasize on how
those tables are created, maybe there is something here :

The idea is that i run the application using a given database. I want this
database to be untouched as for its data, so i'm making a clone of it in
memory.
Then I create views, let's call them viewA, viewB, viewC and viewD with the
statement CREATE VIEW etc...

Then I create real tables in the in-memory clone that contain the content
of the views :
INSERT INTO tableA  SELECT * from viewA

This way I can work on real tables, without altering my original database.

I'm trying to give as much intel as I can, and maybe the fact that I am
using views a bit, and creating real tables thanks to those views, maybe
there is a performance issue I'm not aware of or something like that.

2016-09-07 17:39 GMT+02:00 Igor Korot <ikoro...@gmail.com>:

> Hi, Laura,
>
> On Wed, Sep 7, 2016 at 10:48 AM, Laura BERGOENS
> <laura.bergo...@imerir.com> wrote:
> > Note : I had some real queries that use to take 100 seconds to execute,
> and
> > I optimized them myself.
> > It looks like this :
> >
> > I have 4 tables:  tableA, tableLink, tableC and tableD
> > tableA, Link and C have no more than 10k rows in it, and tableD around
> 50k
> > (which is not big at all right?)
> > The query goes like this :
> > SELECT DISTINCT A1.idA, A1.column1, A1.column2
> > FROM    tableA A1,
> >              tableA A2,
> >              tableLink link,
> >              tableC C1,
> >              tableD D1,
> >              tableD D2,
> > WHERE      C1.idA = A1.idA
> > AND            C1.idD = D1.idD
> > AND           A1.idD  =  D1.idD
> > AND           A1.column2 = 'VALUE'
> > AND           A2.idA = link.id_item_1
> > AND           A1.idA = link.id_item_2
> > AND          D2.idD   =  A2.idD
> > AND          A2.idA = 100
> >
> > This query takes 100 seconds approx.
> > I don't know if that can help you in any way, but the tables have been
> > created with a query like INSERT INTO SELECT * FROM A_View, so they have
> > been created from a view.
>
> After populating the data, do create any indexes?
> Also, I presume that all 4 tables are created like this, not just tableA,
> right?
> BTW, if you can show the schema (no data necessary) for those 4 tables, we
> can
> see if there is a way to improve.
>
> Thank you.
>
>
> > As we can see, only columns from tableA A1 are selected, so most of the
> > joins here can be replaced with something of the form :
> > AND EXISTS (SELECT 1 FROM .... "test join")
> >
> > I managed to drastically reduce time execution on this query with the
> > EXISTS trick, and now it has a normal time execution (below 300 ms for
> > sure, can't tell you how much exactly)
> >
> >
> > I've check the EXPLAIN QUERY PLAN of the original query, and I understood
> > that I was scanning tables in nested loops, so that this can take some
> time
> > (in fact the product of the sizes of all the tables in the FROM clause
> > right?)
> >
> > Here is what i can give you for now, now i'll do some tests that you've
> > recommended earlier
> >
> > 2016-09-07 16:33 GMT+02:00 R Smith <rsm...@rsweb.co.za>:
> >
> >>
> >> On 2016/09/07 4:20 PM, Laura BERGOENS wrote:
> >>
> >>> Hi Mr. Slavin,
> >>>
> >>> As for why the query takes so long, I do know the answer !
> >>> Long story short, my application does a lot of calculation and things,
> I
> >>> don't want to get into the details here, but queries are built and
> >>> auto-generated piece by piece. Therefore, sometimes the queries aren't
> >>> optimized at all.
> >>> I solved that issue myself by touching up the queries a bit before
> >>> executing them, and everything is fine now.
> >>> I was concerned mainly because I figured that maybe some queries were a
> >>> bit
> >>> longer to execute as they should have (let's say 200 ms instead of 100
> >>> ms),
> >>> and I'm running a lot of queries in the app (approx 1000 per seconds).
> >>>
> >>
> >> Magic goalposts...
> >>
> >> "A query" taking 100s is a VERY VERY different problem to 1000 queries
> >> taking 100ms each. And to get technical, you shouldn't really need to
> >> optimize the queries (apart from avoiding the obvious silliness), you
> only
> >> need to know how to ask for the data correctly. Optimization is the job
> of
> >> the query planner in the DB engine - it should get the best fastest
> query
> >> results possible as long as it has all the information (which is what
> >> ANALYZE will do as others mentioned already) and as long as you provide
> the
> >> best Index for the job (which is something we might have some
> suggestions
> >> on if we know the schema and typical query is).
> >>
> >>
> >> I know now that there is nothing to worry about regarding my settings or
> >>> pragmas choices, since I get the same execution time with the sqlite3
> tool
> >>>
> >>
> >> Maybe nothing to worry about, but that is no reason to leave it be -
> >> whatever the case is, if some previous version of SQLite can run it in
> >> 1/10th the time, there MUST be opportunity for improvement.
> >>
> >>
> >> _______________________________________________
> >> sqlite-users mailing list
> >> sqlite-users@mailinglists.sqlite.org
> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> >>
> >
> >
> >
> > --
> > Laura BERGOENS
> > Technicienne supérieure en Informatique et étudiante à l'IMERIR de
> Perpignan
> >
> > *Institut Méditerranéen d'Étude etde Recherche en Informatique*
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>



-- 
Laura BERGOENS
Technicienne supérieure en Informatique et étudiante à l'IMERIR de Perpignan

*Institut Méditerranéen d'Étude etde Recherche en Informatique*
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to