2017-06-08 3 views
0

dies ist eine einfache Auswahlabfrage:zwei großen Tisch kommen langsam

SELECT * 
    from (select * from ods_rfx_prod where dt = '2017-06-07') p 
    left join (select * from ods_rfx_prod_ext where dt = '2017-06-07') pt 
    on p.prod_id = pt.prod_id 

zwei Tabelle (ods_rfx_prod, ods_rfx_prod_ext) alle durch ‚dt‘ aufgeteilt und als RC-Datei gespeichert.

Tabelle p enthält 3000 w Spalten, Tabelle pt enthält 3500 w Spalten. p.prod_id und pt.prod_id hat keine null und Leerzeichen aufnehmen.

es läuft fast für 40min ~ 50min. ich weiß nicht, wie man es optimiert.

+0

die dt Spalten indiziert sind ? – jarlh

+0

Sie können versuchen, ein in Ihrer SQL-Konsole: EXPLAIN SELECT * von (wählen Sie * aus ods_rfx_prod wobei dt = '2017-06-07') p links beizutreten (wählen Sie * aus ods_rfx_prod_ext wo dt = '2017-06-07 ') pt auf p.prod_id = pt.prod_id für die Dokumentation, https://www.sitepoint.com/explain-sql-explain-queries/ – fxlacroix

+0

Tabellen Volumen/Anzahl der Datensätze? Tabellen DDL? –

Antwort

0

Sie können viele verschiedene Kombinationen ausprobieren, um zu prüfen, ob die Leistung steigt.

1) Wie Sie in dem Zustand haben, prüfen Sie, ob die Spalte

indiziert ist

2) Da es sich um eine Datumsspalte ist der Partitionen auf es

3) erstellen können, wie Sie auf ProduktID schließen Sie sich kann versuchen, die Daten auf ProduktID zu sortieren und dann die

4) Sie können versuchen, beitreten gelten auch Eimer zu schaffen, indem die ProduktID Hashing, so dass die Abfrage Vorteil der Karte Seite join nehmen

+0

Keine Antwort ... –

+0

zwei Tabellen wurden von dt partitioniert. –