Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [MYSQL]: Aumentare la velocità di esecuzione query

    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
    stex1984

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Qual è la differenza tra

    Persona (id ,nome,tipo,ricerca)
    e

    Persona (id,nome,tipo,ricerca)
    :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    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!!!
    stex1984

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    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...

    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    mmm... capisco in effetti è vero...
    come faccio a creare un indice sul campo nome?
    posso farlo anche da mysqladministrator?
    in che modo?
    stex1984

  6. #6
    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
    stex1984

  7. #7
    perfetto!!! risolto!!!
    ora è una scheggia nel fare la query!!!!
    grazie mille!!!

    stex
    stex1984

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.