2015-10-07 6 views
9

Ho bisogno di calcolare la quantità totale disponibile dal database, e per questo ho bisogno di fare join con un paio di tabelle. Non è possibile incollare tutta la mia interrogazione, ma ciò che segue è la struttura di base:Calcola la quantità in un modo più veloce rispetto a questa query

select sum(qty) as qty, field 
from 
(
    (
     select SUM(table1.qty) as qty , field 
     from 
     table1 
     left join table2 on table1.field = table2.field 
     left join table3 on table3.field = table2.field 
     where condition 
     group by fieldname 
    ) 
    UNION ALL 
    (
     selecy SUM(table1.qty) as qty,field 
     from 
     table1 
     left join table2 on table1.field = table2.field 
     left join table3 on table3.field = table2.field 
     where condition 
     group by fieldname 
    ) 
    UNION ALL 
    (
     select SUM(table1.qty) as qty, field 
     from 
     table1 
     left join table2 on table1.field = table2.field 
     left join table3 on table3.field = table2.field 
     where condition 
     group by fieldname 
    ) 
    ... 
    .. 
    12 times 
) as temp 
LEFT JOIN another_main_table ON another_main_table.field = temp.field 

Ho preso cura di indici di ogni tabella, ma ci sono alcuni sindacati che stanno prendendo più tempo del previsto. Ci sono circa 45 tabelle utilizzate in questa query e tutte sono esaminate completamente. Alcune tabelle hanno circa 2,6 milioni di record. Puoi per favore suggerirmi come posso ottenere il risultato in 1/2 secondi? A partire da ora sto ottenendo il risultato in circa un minuto.

+0

Non è chiaro cosa è necessario fare con questa query. Le tabelle1, tabella2, tabella3 sono le stesse in tutte le query? Se è così basta usare una query con 'WHERE Condition1 O Condition2 OR .....' – valex

+0

Potrebbe essere una brutta query, ma potrebbe essere necessario pubblicare la query più completa. Potrebbe anche essere necessario postarlo in una posizione esterna al sito come pastebin.com se è troppo grande per essere accettato qui. – DRapp

+0

hey .. Tutte le tabelle table1, table2, table3 sono diverse. Io so se potrei incollare la query qui sarebbe più facile guidarmi..ma non posso pubblicare query qui perché .. Sono limitato a non rivelare informazioni su database e tabelle :(. Scusa per quello. –

risposta

1

Dato che l'esempio fornito non è in grado di giustificare correttamente le soluzioni corrette, ma se analizzo la query in modo approssimativo, è stato utilizzato LEFT JOIN, quindi sarà necessario più tempo rispetto a INNER JOIN.

Quindi, utilizzare INNER JOIN se i dati lo consentono

Problemi correlati