Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it L'avatar di HammerFist
    Registrato dal
    May 2005
    Messaggi
    1,110

    [mysql] subquery che blocca l'esecuzione

    Salve, ho un database con decine di migliaia di record nelle tabelle,
    devo effetturare una select e utilizzo una query dove poi passo una subquery
    e ho notato che è proprio sulla sub che ha difficolta di esecuzione e non riesco a portare
    a termine l'elaborazione dei dati...
    da dove posso iniziare a capire come risolvere?

    SELECT id FROM commissioni WHERE id IN (SELECT id_commissione FROM commissioni_status WHERE fase = '8' AND status = 'true') ORDER BY id DESC")

    questa è la query

    commissioni ha più di 4000 record e commissioni_status oltre 16000
    Forumista Kriptoniano

  2. #2
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    489
    che errore ti da?
    se non ricordo male le subquery devono dare un solo valore....

  3. #3
    Esegui la subquery per conto suo e vedi tempi e risposte. Tieni presente che IN() e di fatto una sequenza di OR ed e' anche la cosa tra le piu' pesanti per la ricerca, ma 16000 record per un db sono un nulla. Forse devi gestire meglio gli indici.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    stai usando ritengo mysql vecchia versione è non mariadb
    in questo caso la subquery non viene materializzata e quindi ripetuta come un nested loop
    usa join
    oppure due query se i risultati son pochi con group_concat

  5. #5
    Utente di HTML.it L'avatar di HammerFist
    Registrato dal
    May 2005
    Messaggi
    1,110
    uso adesso la 5.5.20 di mysql... provo a separare le query
    Forumista Kriptoniano

  6. #6
    Utente di HTML.it L'avatar di HammerFist
    Registrato dal
    May 2005
    Messaggi
    1,110
    come potrei gestirli meglio gli indici? dove posso leggere qualcosa in merito?
    Forumista Kriptoniano

  7. #7
    Ciao,

    hai usato qualche indice?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  8. #8
    SELECT id FROM commissioni WHERE id IN (SELECT id_commissione FROM commissioni_status WHERE fase = '8' AND status = 'true') ORDER BY id DESC")

    Tra l'altro sbaglio o la query si chiude con un " mai aperto?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  9. #9
    Utente di HTML.it L'avatar di HammerFist
    Registrato dal
    May 2005
    Messaggi
    1,110
    l'ho trascritta male...
    "SELECT id FROM commissioni WHERE id IN (SELECT id_commissione FROM commissioni_status WHERE fase = '8' AND status = 'true') ORDER BY id DESC"
    funziona... solo che adesso è troppo lenta
    Forumista Kriptoniano

  10. #10
    Quote Originariamente inviata da HammerFist Visualizza il messaggio
    l'ho trascritta male...
    "SELECT id FROM commissioni WHERE id IN (SELECT id_commissione FROM commissioni_status WHERE fase = '8' AND status = 'true') ORDER BY id DESC"
    funziona... solo che adesso è troppo lenta
    Indicizza il campo fase in commissioni status. E' inutile far scorrere tutta la tabella quando potresti trovare raggruppati i record per fase
    Ultima modifica di piero.mac; 06-08-2015 a 12:16

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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