[MYSQL] Left Join lente: come ottimizare la query?

martedì 08 maggio 2012 - 15.22
Tag Elenco Tags  MySQL 5.5  |  MySQL 5.1

the_driver Profilo | Senior Member

Ciaoa tutti, purtroppo riscontro un grosso problema di lentezza su una applicazione web che utilizza Mysql come database.

Il problema è molto semplice: è stata definita una griglia popolata da dei valori presi da una query dinamica (ovvero, via sw seleziono quali colonne restituire)formata da LEFT Join, in quanto vogliamo che comandi sembre la tabella principale.


Esempio:

tabella persona (colonna id_persona : chiave primaria INT autoincrement)
tabella anagrafica (colonna id_anagrafica: chiave primaria,colonna id_persona: INT)
tabella hobbies (colonna id_hobbies: chiave primaria,,colonna id_persona: INT)

La tabella persona "comanda" sulle altre tabelle. Ha circa 1200 record.


Eseguendo il profiler, mi segnala le seguenti cose:

Bad Performance
Full Table Scans
Using Temporary
Using Filesort --> (ovviamente i risultati sono ordinati per persona)






Grazie


alx_81 Profilo | Guru

>Ciaoa tutti, purtroppo riscontro un grosso problema di lentezza
>su una applicazione web che utilizza Mysql come database.
Ciao

>Eseguendo il profiler, mi segnala le seguenti cose:
>Bad Performance
>Full Table Scans
>Using Temporary
>Using Filesort --> (ovviamente i risultati sono ordinati per persona)
Il fatto che la query sia dinamica non ti aiuta, soprattutto se cambia spesso e se i filtri sono disponibili su ogni campo (pratica da non seguire).
Direi che potresti essere sprovvisto di indici, e, anche qualora volessi farne, dovresti isolare il numero di filtri possibili, andando a definire le query che vengono scritte di volta in volta per evitare i fullscan e leggere con maggiore velocità di risposta e minor consumo di cpu. 1200 righe sono VERAMENTE poche per un RDBMS. Hai qualche dettaglio in più sulle ricerche? Conosci tutti i filtri possibili? Hai mai fatto un piano di tuning per disegnare gli indici corretti?

>Grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

the_driver Profilo | Senior Member

Alex81, ho indicizzato una colonna che usavo nelle join ... Le perfomance sono nettamente migliorate!

GRAZIE!!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5