Repository 32bit  Forum
Repository 64bit  Wiki

SQLite e ottimizzazione query

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

SQLite e ottimizzazione query

Messaggioda lennynero » mer mar 10, 2010 16:13

Ciao a tutti, vorrei esporre un piccolo dubbio/richiesta su come simulare una full join su sqlite o riuscire a ottimizzare la mia query.
In sostanza la query che ho scritto è piuttosto complessa e serve per effettuare delle statistiche su dei dati, in sintesi fa questo:
somma i pasti per un cliente in una data, somma gli scarichi di magazzino per quel cliente in quella data e mette in relazione le 2 quantità

La relazione tra le 2 "viste" può essere vuota da un lato, quindi il mio approccio è il seguente:
Ho una query che mi calcola i pasti P, e una che mi calcola gli scarichi S, così lo pseudocodice diventa:
Codice: Seleziona tutto
select * from P left join S on P.cliente=S.cliente and P.data=S.data union
select * from S left join P on P.cliente=S.cliente and P.data=S.data


Il mio problema sostanzialmente sta nel fatto che le query P e S sono piuttosto complesse e mi scoccia doverle eseguire 2 volte per ottenere il risultato voluto.
Un modo per ottimizzare la query è appunto una full join scritta così:
Codice: Seleziona tutto
select * from P inner join S on P.cliente=S.cliente and P.data=S.data

ma so che questo non è possibile(in sqlite), quindi chiedo a voi come potrei ottimizzare questa query per ridurre il tempo di calcolo. Grazie in anticipo.
Avatar utente
lennynero
Linux 2.6
Linux 2.6
 
Messaggi: 567
Iscritto il: dom mag 02, 2004 23:00
Località: Salerno
Slackware: 14.1-x64
Kernel: 3.10.17
Desktop: xfce-4.10

Re: SQLite e ottimizzazione query

Messaggioda alexxxius » mer mar 10, 2010 19:38

Ciao non conosco sqLite, ma un modo per fare la full join senza il costrutto join e quello di fare la theta join (se no sbaglio si dice così) usando il where:

Codice: Seleziona tutto
select * from P,S where P.cliente=S.cliente and P.data=S.data


ciao
Avatar utente
alexxxius
Linux 2.4
Linux 2.4
 
Messaggi: 275
Iscritto il: mar feb 28, 2006 0:09
Località: Dove vola l'aquila rosanero
Slackware: 13.1
Kernel: 2.6.33.4
Desktop: Kde 4.4.3

Re: SQLite e ottimizzazione query

Messaggioda lennynero » gio mar 11, 2010 4:03

Grazie per la risposta alexxxius, solo che a me non interessa il theta join poichè quello serve per prendere solo le righe di P e S che matchano le clausole, a me interessa un full join o un workaround per prendere sia le tuple che matchano le clausole sia quelle che da un lato hanno il join vuoto, per intenderci un letf join + un right join con distinct. In ogni caso per adesso mi accontento di creare una tabella temporanea con la query in esame, l'unico inconveniente è che per creare la tabella comunque impiegherò un pò di tempo(sto parlando di 15secondi circa), inoltre devo prevedere un trigger che nel caso di aggiunte/modifiche di pasti o scarichi deve ricreare la table...Non mi soddisfa molto questa soluzione, poichè ad ogni modifica potrei dover aggiornare la table, oppure dovrei scegliere di creare ad ogni prima richiesta di quei dati. Preciso inoltre che quei dati saranno poi ulteriormente filtrati con dei where per facilitarne la navigazione ma a quel punto il + sarebbe fatto... Attendo altri consigli. Grazie.
Avatar utente
lennynero
Linux 2.6
Linux 2.6
 
Messaggi: 567
Iscritto il: dom mag 02, 2004 23:00
Località: Salerno
Slackware: 14.1-x64
Kernel: 3.10.17
Desktop: xfce-4.10


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Yahoo [Bot] e 1 ospite