PDA

Visualizza la versione completa : [MYSQL]: Aumentare la velocità di esecuzione query


stex1984
27-08-2006, 16:13
Ciao, ho una tabella cosi formata:

Persona (id ,nome,tipo,ricerca)

ora io faccio uso di query del tipo

select * from persona where id=qualcosa and tipo=qualcosa
e
select * from persona where nome=qualcosa and tipo=qualcosa

mi ritrovo che la query per id è velocissima, mentre quella per nome risulta lenta, anche perchè ho migliaia di record nella tabella.
ora se io modifico la tabella cosi:

Persona (id,nome,tipo,ricerca)

ottengo qualche miglioramento o peggioro la situazione?
nel senso:
facendo la modifica aumento la velocità di esecuzione della seconda query senza abbassare la velocità della prima query?

nota: i campi sono tutti dei varchar!!!
grazie
:ciauz:

alka
27-08-2006, 16:18
Qual è la differenza tra


Persona (id ,nome,tipo,ricerca)

e


Persona (id,nome,tipo,ricerca)
:master:

stex1984
27-08-2006, 16:21
scusa... ho sbagliato a scrivere la "grammatica sql..."
intendevo questa modifica:
da
Persona (id ,nome,tipo,ricerca)
a
Persona (id ,nome ,tipo,ricerca)

nel primo caso id è chiave primaria univoca...
nel secondo caso id e nome sono chiavi primarie insieme!!!
:ciauz:

alka
27-08-2006, 16:30
Non mi sembra una buona idea: la chiave primaria è ciò che identifica univocamente un record.

Nel tuo caso, se apporti quella modifica, incrementi le prestazioni ma di fatto la chiave primaria è differente; non puoi avere record con stesso ID e nome, ma puoi avere record con lo stesso ID... :stordita:

La soluzione più semplice è quella di aggiungere semplicemente un indice sul campo NOME.

Se possibile, si dovrebbe ricercare sempre per chiave primaria, quindi per ID, ma la presenza dell'indice velocizza le ricerche anche per nome, che in genere sono senz'altro più lente a causa della natura del campo che è un testo invece di un semplice valore numerico.

Ciao! :ciauz:

stex1984
27-08-2006, 16:32
mmm... capisco in effetti è vero...
come faccio a creare un indice sul campo nome?
posso farlo anche da mysqladministrator?
in che modo?
:ciauz:

stex1984
27-08-2006, 16:39
ok, credo di aver creato l'indice sul campo nome...
ora devo fare altro? o basta che io lo creo e poi se la sbriga tutto mysql?
grazie
:ciauz:

stex1984
27-08-2006, 16:41
perfetto!!! risolto!!!
ora è una scheggia nel fare la query!!!!
grazie mille!!!
:yuppi: :yuppi:
stex :ciauz:

alka
27-08-2006, 16:47
Originariamente inviato da stex1984
basta che io lo creo e poi se la sbriga tutto mysql?

Sì. Quando esegui una query, MySQL determina il miglior "execution plan", cioè l'uso ponderato degli indici che ha a disposizione a seconda delle condizioni e degli ordinamenti espressi tramite lo statement SQL per eseguire nel modo più veloce possibile la query.

Ciao! :ciauz:

Loading