Repository 32bit  Forum
Repository 64bit  Wiki

accelerazione query db

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.

accelerazione query db

Messaggioda ZeroUno » mar ago 03, 2010 19:18

Salve.

Ho un db mysql composto di 3 tabelle. Una piccola (una 50ina di record), una media (c.a. 30K di record), una immensa (c.a. 5M di record). chiamiamole A,B,C

Le tre tabelle sono legate in cascata così:

campi
A: id: chiave primaria; txt-a: varchar
B: id: chiave primaria; a-id: puntamento ad A.id; txt-b: varchar
C: id: chiave primaria; a-id: puntamento ad A.id; b-id: puntamento a B.id; txt-c: varchar
i campi sono legati con foreign key

io devo cercare un record in C e devo tirare fuori i relativi record di A e B
select A.txt-a, B.txt-b, C.txt-c from C left join B on C.b-id=B.id left join B on B.a-id=A.id where txt-c like '%pippo%'

a seconda dei casi la query può impiegare anche 2 minuti.

In qualche caso, da ricercare ho anche chiavi su txt-a e/o txt-b. Questo significa che potrei limitare la ricerca ad un ristretto numero di record di C, il che potrebbe accellerare di molto la ricerca.
Tuttavia ricerche come

select A.txt-a, B.txt-b, C.txt-c from C left join B on C.b-id=B.id left join B on B.a-id=A.id where txt-a = 'pluto' and txt-c like '%pippo%'

non velocizzano assolutamente la ricerca.

Qualcuno sa come sfruttare quel pluto per ridurre effettivamente il numero di record su cui cercare?
In pratica mi aspetterei cose tipo "tira fuori A.id rispondenti a txt-a='pluto' e cerca 'pippo' solo nei record di C con C.id-a corrispondenti alla ricerca precedente"


Grazie
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4420
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: accelerazione query db

Messaggioda murdock » mar ago 03, 2010 19:38

Hai messo i campi su cui effettui la query (txt-a, txt-b, txt-c, i vari a-id ed id) come INDEX?

Saluti,
MuRdOcK
Avatar utente
murdock
Linux 2.4
Linux 2.4
 
Messaggi: 452
Iscritto il: ven mag 25, 2007 11:58
Slackware: 64 14.1
Kernel: 3.16,3
Desktop: KDE 4.14,1

Re: accelerazione query db

Messaggioda ZeroUno » mar ago 03, 2010 19:43

si. senza indice arrivo anche a 10 minuti se non più
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4420
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: accelerazione query db

Messaggioda murdock » mar ago 03, 2010 19:57

Wow, vediamo se ho capito bene:
...Tira fuori A.id rispondenti a txt-a='pluto' e cerca 'pippo' solo nei record di C con C.id-a

Io proverei così:
SELECT A.id FROM A WHERE A.txt-a="pluto" AND C.id-a=A.id AND C.txt-c LIKE "%pippo%";
Senza le join.
Se ho capito male me ne scuso ;)

Saluti,
MuRdOcK
Avatar utente
murdock
Linux 2.4
Linux 2.4
 
Messaggi: 452
Iscritto il: ven mag 25, 2007 11:58
Slackware: 64 14.1
Kernel: 3.16,3
Desktop: KDE 4.14,1

Re: accelerazione query db

Messaggioda ZeroUno » mar ago 03, 2010 20:07

mi sembra che a suo tempo la prova l'avevo fatta:

select A.txt-a, B.txt-b, C.txt-c from A,B,C where C.b-id=B.id and B.a-id=A.id and txt-a = 'pluto' and txt-c like '%pippo%'

ma non velocizzava,
ma è passato un po' di tempo.



Dopo provo, ma mi sa che dovrò rimandare l'analisi a dopo ferragosto (vacanze....:-) )

ciao.
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4420
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: accelerazione query db

Messaggioda murdock » mar ago 03, 2010 20:15

Beh, allora avremo modo di riparlarne, buone ferie ;)

Saluti,
MuRdOcK
Avatar utente
murdock
Linux 2.4
Linux 2.4
 
Messaggi: 452
Iscritto il: ven mag 25, 2007 11:58
Slackware: 64 14.1
Kernel: 3.16,3
Desktop: KDE 4.14,1

Re: accelerazione query db

Messaggioda ZeroUno » mar ago 03, 2010 23:05

Tanto ora sto ristrutturando tutto l'applicativo.
Appena arriverò a quella sezione mi potrò sbizzarrire con gli esperimenti.


Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4420
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: accelerazione query db

Messaggioda neongen » mer ago 04, 2010 10:49

però da quello che scrivi mi sembra superluo C.b-id che punta a B.id :dontknow:
Avatar utente
neongen
Packager
Packager
 
Messaggi: 827
Iscritto il: ven mag 25, 2007 11:37
Nome Cognome: Enrico
Slackware: 14.0_64
Kernel: 3.4.4
Desktop: KDE 4.5.5
Distribuzione: Maemo 5


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite