Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    295

    velocizzare/ottimizzare una query

    Ragazzi eseguo la seguente query ma spesso è lenta....
    sapreste darmi qualche consiglio su come ottimizzarla ???
    meglio inserire indici ???? dove ???

    SELECT tb_pianifica.*,tb_grpwbs.id AS n_gruppo,tb_grpwbs.id_collega AS collega,tb_grpwbs.id_status AS status_gruppo,
    (CASE WHEN tb_pianifica.dt_steering <> '0000-00-00' THEN REPLACE(DATE_FORMAT(dt_steering,GET_FORMAT(DATE,'E UR')),'.','/') ELSE ' ' END) AS data_ste,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN tb_grpwbs.wbs ELSE tb_pianifica.wbs END)AS wbs,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN tb_npp.codice ELSE tb_npp.codice END)AS cod_npp,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN tb_pm.nome ELSE tb_pm.nome END)AS nome_pm,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN tb_st.descrizione ELSE tb_st.descrizione END)AS desc_st,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN tb_spec.descrizione ELSE tb_spec.descrizione END)AS desc_spec,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN tb_grpwbs.notes ELSE tb_pianifica.notes END)AS notes,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.budget) ELSE tb_pianifica.budget END)AS budget,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.pianificato) ELSE tb_pianifica.pianificato END)AS pianificato,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.cap13) ELSE tb_pianifica.cap13 END)AS cap13,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.cap15) ELSE tb_pianifica.cap15 END)AS cap15,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.cap16) ELSE tb_pianifica.cap16 END)AS cap16,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.capaltri) ELSE tb_pianifica.cap16 END)AS capaltri,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.cap13+tb_pianifica.cap15+tb_piani fica.cap16+tb_pianifica.capaltri) ELSE tb_pianifica.cap13+tb_pianifica.cap15+tb_pianifica .cap16+tb_pianifica.capaltri END)AS tot_eff_a_c,
    (CASE WHEN tb_pianifica.id_grpwbs <> '0' AND tb_grpwbs.id_collega='1' AND tb_grpwbs.id_status='1' THEN SUM(tb_pianifica.budget-tb_pianifica.eff_tot-tb_pianifica.cons_prev_dich+ tb_pianifica.cap13+tb_pianifica.cap15+tb_pianifica .cap16+tb_pianifica.capaltri) ELSE tb_pianifica.budget-tb_pianifica.eff_tot-tb_pianifica.cons_prev_dich+ tb_pianifica.cap13+tb_pianifica.cap15+tb_pianifica .cap16+tb_pianifica.capaltri END)AS residuo_f_a
    FROM tb_pianifica
    LEFT JOIN tb_grpwbs ON tb_grpwbs.id = tb_pianifica.id_grpwbs
    LEFT JOIN tb_npp ON tb_pianifica.id_npp = tb_npp.id
    LEFT JOIN tb_pm ON tb_pianifica.id_pm = tb_pm.id
    LEFT JOIN tb_st ON tb_pianifica.id_sog_tec = tb_st.id
    LEFT JOIN tb_spec ON tb_pianifica.id_spec = tb_spec.id
    GROUP BY wbs
    ORDER BY tb_pianifica.id_grpwbs DESC

  2. #2
    ragazzo, lo vuoi seguire il regolamento e dire di che db si tratta?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    295
    si scusa MySQL 5.7

  4. #4
    ok. prima cosa: se non hai indici, aggiungili sui campi delle join

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    295
    Quote Originariamente inviata da optime Visualizza il messaggio
    ok. prima cosa: se non hai indici, aggiungili sui campi delle join
    unica cosa che ho in tutte le tabelle ID auto_increment
    ....
    scusa ignoranza ma come inserisco le join sui campi ?? cosa intendi ?


  6. #6
    cose tipo questa LEFT JOIN tb_grpwbs ON tb_grpwbs.id = tb_pianifica.id_grpwbs non le hai scritte tu?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    295
    Quote Originariamente inviata da optime Visualizza il messaggio
    cose tipo questa LEFT JOIN tb_grpwbs ON tb_grpwbs.id = tb_pianifica.id_grpwbs non le hai scritte tu?
    certo che le ho scritte io....

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    295
    scusa avevo letto male...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    295
    ok una volta creati gli indici ???

  10. #10

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 © 2019 vBulletin Solutions, Inc. All rights reserved.