je la sous-requête suivante:Améliorer les performances des sous-requête corrélée avec des jointures internes
SELECT
b.state,
b.city,
count(b.state) as totalCount,
sum(cast(replace(b.annual_prod, ',','.') as decimal)) AS annualProd,
(
SELECT count(size_k)
FROM opentable_clean a
WHERE a.state = b.state
AND a.city = b.city
AND cast(replace(a.size_k, ',','.') as decimal) >= 20
GROUP BY a.state, a.city
) as Above20k
FROM opentable_clean b
GROUP BY b.state, b.city
ORDER by annualProd DESC;
Cela fonctionne, mais la requête est très inefficace et prend beaucoup de temps compte tenu de la taille de la table sous-jacente. Je pense qu'en utilisant une jointure interne pourrait améliorer la performance mais je n'ai pas pu essayer celui qui fonctionne.
Toutes les suggestions seraient utiles car je suis nouveau à sql.
Il semble que vous stockez des valeurs numériques sous forme de chaînes ('a.size_k' en particulier), et que la manipulation de conversion de type & chaîne dans votre clause interne "where" est probablement pas SARG-capable. Pouvez-vous corriger la table pour stocker vos données numériques correctement? – alroc
Quels SGBD utilisez-vous? Postgres? Oracle? –
J'utilise postgres – user3003374