Maison >base de données >tutoriel mysql >Pourquoi mes requêtes SQL Server 2008 avec des expressions de date sont-elles si lentes ?

Pourquoi mes requêtes SQL Server 2008 avec des expressions de date sont-elles si lentes ?

DDD
DDDoriginal
2024-12-28 08:44:13661parcourir

Why Are My SQL Server 2008 Queries with Date Expressions So Slow?

Optimisation des requêtes : remédier aux performances lentes des requêtes avec les expressions de date

Lorsque vous travaillez avec SQL Server 2008, il est crucial de comprendre l'impact des expressions de date sur les performances des requêtes. Considérez la requête suivante :

Where FK.DT = CAST(DATEADD(m, DATEDIFF(m, 0, getdate()), 0) as DATE)

Cette requête s'exécute exceptionnellement lentement par rapport à une version plus simple qui utilise une chaîne littérale :

Where FK.DT = '2013-05-01'

Cause du problème de performances

Le ralentissement des performances est dû à un bug dans l'estimateur de cardinalité de SQL Server. Le bug affecte la précision des estimations lors de l'utilisation d'expressions de date complexes. Dans ce cas, l'expression est évaluée au début du mois en cours (« 1786-06-01 »), ce qui fausse l'estimation du nombre de lignes correspondantes.

Solution

Pour résoudre le problème de performances, il est recommandé d'utiliser plutôt l'expression suivante :

Where FK.DT = cast(getdate() + 1 - datepart(day, getdate()) as date)

Cette expression calcule le premier jour du mois en cours, fournissant des estimations de cardinalité plus précises et améliorant considérablement les performances des requêtes.

De plus, l'activation de l'indicateur de trace 4199 peut résoudre le bogue et fournir des estimations de cardinalité plus précises pour les expressions de date complexes. Cependant, il est important de noter que cela peut avoir des implications pour d'autres requêtes qui reposent sur une estimation de cardinalité correcte.

Bonnes pratiques

Pour des performances de requête optimales, envisagez d'utiliser des requêtes plus simples. expressions de date ou en utilisant des chaînes littérales lorsque cela est possible. Gardez à l’esprit que les expressions de date complexes peuvent conduire à une cardinalité mal estimée et avoir un impact sur l’optimisation des requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn