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
Libérer: 2024-12-28 08:44:13
original
654 Les gens l'ont consulté

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)
Copier après la connexion

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'
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal