Pagina 1 di 1

accelerazione query db

Inviato: mar 3 ago 2010, 20:18
da ZeroUno
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

Re: accelerazione query db

Inviato: mar 3 ago 2010, 20:38
da murdock
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

Re: accelerazione query db

Inviato: mar 3 ago 2010, 20:43
da ZeroUno
si. senza indice arrivo anche a 10 minuti se non più

Re: accelerazione query db

Inviato: mar 3 ago 2010, 20:57
da murdock
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

Re: accelerazione query db

Inviato: mar 3 ago 2010, 21:07
da ZeroUno
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

Re: accelerazione query db

Inviato: mar 3 ago 2010, 21:15
da murdock
Beh, allora avremo modo di riparlarne, buone ferie ;)

Saluti,
MuRdOcK

Re: accelerazione query db

Inviato: mer 4 ago 2010, 0:05
da ZeroUno
Tanto ora sto ristrutturando tutto l'applicativo.
Appena arriverò a quella sezione mi potrò sbizzarrire con gli esperimenti.


Ciao
01

Re: accelerazione query db

Inviato: mer 4 ago 2010, 11:49
da neongen
però da quello che scrivi mi sembra superluo C.b-id che punta a B.id :dontknow: