Maison >base de données >tutoriel mysql >Comment récupérer efficacement les données du mois dernier dans SQL Server ?
Comment récupérer les enregistrements du mois dernier dans SQL Server
Pour obtenir des enregistrements d'une période spécifique, une pratique courante consiste à utiliser des requêtes par plage avec des limites inférieures et supérieures inclusives. Cependant, cette approche pose deux défis : compromettre l'utilisation de l'index et potentiellement sélectionner des données involontaires.
1. Utilisation de l'index :
L'application de fonctions à une colonne recherchée, y compris des fonctions implicites telles que la conversion, peut forcer l'optimiseur à ignorer les index sur cette colonne, ce qui entraîne une recherche linéaire dans chaque enregistrement. Considérez les horodatages, qui sont généralement stockés sous forme de décompte chronologique. L'extraction de parties de date à partir de tels horodatages nécessite des calculs complexes, ce qui ralentit la requête.
2. Données involontaires :
Les plages de limite supérieure inclusives, telles que <=, peuvent entraîner une sélection de données incorrecte, en fonction de la version de SQL Server et des types de données des colonnes. Les données de minuit du lendemain ou les enregistrements de parties de la journée en cours peuvent être inclus ou exclus par erreur.
Approche correcte :
Pour résoudre ces problèmes, utilisez l'option structure de requête suivante :
WHERE date_created >= @startOfPreviousMonth AND date_created < @startOfCurrentMonth
Pour déterminer le début des mois précédent et en cours, utilisez ce qui suit calculs :
@startOfPreviousMonth = DATEADD(month, -1, @startOfCurrentMonth) @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0)
Cette approche garantit l'utilisation de l'index et une sélection précise des données. Le script complet serait :
DECLARE @startOfCurrentMonth DATETIME SET @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0) SELECT * FROM Member WHERE date_created >= DATEADD(month, -1, @startOfCurrentMonth) AND date_created < @startOfCurrentMonthEn effectuant des opérations de date une seule fois sur une seule valeur, l'optimiseur peut exploiter les indices et la requête renvoie des données correctes.
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!