2016-06-09 15 views
5

Abbiamo notato che le query eseguite con lo standard SQL sono di solito un po 'più lente e molte volte di un fattore 5. La seguente query che ottiene il conteggio degli hit viene eseguita in 1.8s con legacy SQL, ma richiede 10 secondi utilizzando lo standard SQL. Le query sono:SQL standard costantemente più lento di Legacy SQL?

Legacy SQL:

SELECT 
    max_time, 
    COUNT(*) AS cnt 
FROM (
    SELECT 
    MAX(hits.time) WITHIN RECORD AS max_time, 
    FROM 
    [google_analytics.ga_sessions_20160601]) 
GROUP BY 1 
ORDER BY 2 DESC 
LIMIT 100; 

SQL standard:

SELECT 
    (SELECT MAX(time) FROM sessions.hits) AS max_time, 
    COUNT(*) AS cnt 
FROM 
    `google_analytics.ga_sessions_20160601` AS sessions 
GROUP BY 1 
ORDER BY 2 DESC 
LIMIT 100; 

notiamo che la quantità di "calcolare" nella prima fase è di solito un po 'più alto e c'è più attesa nella fase finale.

Anche altre query come un semplice SELECT COUNT(*) presentano differenze simili.

È vero che lo standard SQL è costantemente più lento del precedente SQL?

+1

Sto ancora osservando questo caso (gennaio 2017). – SheRey

+0

Sto osservando (maggio 2017) lo stesso problema: std SQL è 2-3 volte più lento. L'esempio è 'SELECT substr (titolo, 1,1) t, count (1) cnt, sum (id), sum (num_characters) FROM [bigquery-public-data.samples.wikipedia] GROUP BY t ORDINA PER cnt desc' che richiede meno di 4,5 secondi in legacy e oltre 9 secondi in SQL standard. – tworec

risposta

2

Grazie per il rapporto - lo esamineremo. SQL standard è ancora in versione Beta, e c'è un lavoro sulle prestazioni noto che deve essere fatto prima del rilascio finale: controlleremo se questo influisce anche sulle tue query.

+1

Questo sta ancora accadendo a partire da marzo 2017 con la maggior parte delle query circa 2-3 volte più lento con standard sql. –

+0

@ManiGandham - puoi fornire gli ID di lavoro per query veloci (legacy) e lente (standard) - non abbiamo tale discrepanza nei nostri test, ma forse dipende dai tuoi dati? –

+0

Il caso di supporto GCP n. 12209159 lo conferma con il personale. instinctive-01: bquijob_1c21511b_15a8bda9ad0 per eredità. istintivo-01: bquijob_1e7d55a5_15a8bda7329 per standard. –