web-dev-qa-db-fra.com

La «qualité» de l'optimisation de la requête diffère-t-elle par un fournisseur de base de données?

Je n'ai pas de compréhension claire de l'optimisation des requêtes dans aucune base de données, autre que celle-ci "ça arrive". Maintenant, je viens de voir un "Moyen" post qui discute des pièges d'utilisation d'un CTE PostgreSQL en termes d'optimisation car le CTE n'est évalué qu'une fois et que toutes les optimisations pouvant être appliquées en termes de la manière dont Le CTE est utilisé, la base de données ne peut tout simplement pas s'appliquer.

Mais l'exemple de la publication du blog semble trivial pour optimiser - c'est-à-dire.

SELECT * FROM foo WHERE id = 500000;

vs

WITH cte AS (
  SELECT * FROM foo
)
SELECT * FROM cte WHERE id = 500000;

Si le calcul de la CTE est fait paresseusement sur la première exigence, j'imagine que ces deux requêtes pouvaient être optimisées de la même manière (je pense au moins).

Et cela m'a fait me demander ... SQL Server peut-il optimiser une telle requête supérieure à celle des postgres?

Existe-t-il des différences connues entre les bases de données dans l'étendue/la capacité qu'ils ont dans l'optimisation des requêtes?

5
Zach Smith

Oui, l'optimisation de la requête est différente non seulement entre les fournisseurs de base de données (Oracle, SQL Server, Postgres, MySQL, etc.), mais également entre différentes versions de la même base de données. Par exemple, SQL Server 2017 a des capacités différentes que SQL Server 2016.

4
Brent Ozar

J'imagine que ces deux requêtes pouvaient être optimisées de la même manière

Et pourquoi supposeriez-vous cela? Parce que surtout:

  • Les optimiseurs de requête sont compliqués
  • Ils ne sont souvent pas Greenfield - ils poussent au fil du temps.

Différentes déclarations peuvent frapper différents domaines d'un optimiseur de requête. Ils sont un sujet de recherche approfondie, ils diffèrent également de manière significative entre les bases de données.

1
TomTom