

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Ottimizzare le query
<a name="performance-tuning-s3-throttling-optimizing-queries"></a>

Utilizza i suggerimenti di questa sezione per ottimizzare le query SQL in Athena.

## Utilizza LIMIT con la clausola ORDER BY
<a name="performance-tuning-s3-throttling-use-limit-with-the-order-by-clause"></a>

La clausola `ORDER BY` restituisce i dati disponendoli in ordine. Ciò richiede che Athena invii tutte le righe di dati a un singolo nodo worker e che quindi ordini le righe. Questo tipo di query può essere eseguito a lungo o addirittura non andare a buon fine.

Per una maggiore efficienza delle query, esamina i {{N}} valori iniziali o inferiori, quindi utilizza anche una clausola. `LIMIT` Ciò riduce in modo significativo il costo dell'ordinamento, inviando sia l'ordinamento sia le restrizioni ai singoli nodi worker anziché a un singolo worker.

## Ottimizzazione delle clausole JOIN
<a name="performance-tuning-s3-throttling-optimize-join-clauses"></a>

Quando effettui il join di due tabelle, Athena distribuisce la tabella a destra ai nodi worker, quindi trasmette la tabella a sinistra per eseguire il join.

Per questo motivo, specifica la tabella di maggiori dimensioni sul lato sinistro del join e la tabella di dimensioni inferiori sul lato destro del join. In questo modo, Athena utilizza meno memoria ed esegue la query con una latenza inferiore.

Inoltre, nota quanto segue:
+ Quando utilizzi più comandi `JOIN`, specifica le tabelle dalla più grande alla più piccola.
+ Evita i cross join a meno che non siano richiesti dalla query.

## Ottimizzazione delle clausole GROUP BY
<a name="performance-tuning-s3-throttling-optimize-group-by-clauses"></a>

L'operatore `GROUP BY` distribuisce le righe ai nodi worker in base alle colonne `GROUP BY`. Queste colonne hanno un riferimento in memoria e i valori sono confrontati man mano che le righe sono acquisite. I valori sono aggregati insieme quando si trova una corrispondenza con la colonna `GROUP BY`. Considerando il modo di funzionamento di questo processo, è consigliabile ordinare le colonne dalla cardinalità più alta a quella più bassa.

## Utilizzo di numeri anziché di stringhe
<a name="performance-tuning-s3-throttling-use-numbers-instead-of-strings"></a>

Poiché i numeri richiedono meno memoria e sono più veloci da elaborare rispetto alle stringhe, se possibile utilizza numeri anziché stringhe.

## Limitazione del numero di colonne
<a name="performance-tuning-s3-throttling-limit-the-number-of-columns"></a>

Per ridurre la quantità totale di memoria necessaria per archiviare i dati, limita il numero di colonne specificato nella dichiarazione `SELECT`.

## Utilizzo di espressioni regolari anziché di LIKE
<a name="performance-tuning-s3-throttling-use-regular-expressions-instead-of-like"></a>

Le query che includono clausole quali `LIKE '%string%'` su stringhe di grandi dimensioni possono essere molto intense dal punto di vista computazionale. Quando filtri in base a più valori su una colonna di stringhe, utilizza la funzione [regexp\_like()](https://trino.io/docs/current/functions/regexp.html#regexp_like) e un'espressione regolare. Ciò è particolarmente utile quando confronti un lungo elenco di valori.

## Utilizzo della clausola LIMIT
<a name="performance-tuning-s3-throttling-use-the-limit-clause"></a>

Quando esegui una query, anziché selezionare tutte le colonne, puoi utilizzare la clausola `LIMIT` per restituire solo le colonne necessarie. In questo modo si riducono le dimensioni del set di dati elaborato tramite la pipeline di esecuzione delle query. Le clausole `LIMIT` sono più utili quando esegui query su tabelle con un gran numero di colonne basate su stringhe. Le clausole `LIMIT` sono utili anche quando esegui più join o aggregazioni sulle query.