J'ai 2 tables ont permis de fusionner les tableaux suivants:Très lent requêtes SQL Server
Authors
-Aid bigint
-Surname nvarchar(500)
-Email nvarchar(500)
Articles
-ArId varchar(50)
-Year int
-……Some other fields……
ArticleAuthors
-ArId varchar(50)
-Aid bigint
Classifications
-ClassNumber int
-ClassDescription nvarchar(100)
ClassArticles
-ArId varchar(50)
-ClassNumber int
Après dénormaliser ces tables les tables abouti étaient:
Articles
-FieldId int
-ArId varchar(50)
-ClassNumber int (Foreign key from the Classifications table)
-Year int
Authors
-FieldId int
-ArId varchar(50) (Foreign key from the Articles table)
-Aid bigint
-Surname nvarchar(500)
-Email nvarchar(500)
-Year int
Voici les conditions des données à l'intérieur les tables: pour résultat
- base de données SQL Server 2008
- Les relations entre les deux tables sont appliquées physiquement
- La table authors a 50 millions de disques
- Le tableau des articles a 20 millions de disques
- L'auteur a écrit de nombreux articles au cours de la même année avec des e-mails différents
- Il sont les auteurs dans la table des auteurs avec ArIds qui ne référencent pas ArIds dans la table Articles (enregistrements orphelins)
- Les valeurs dans les champs Année s'étendent de 2002 à 2009
- La table Articles a un index cluster unique sur la [ FieldId et Yea r] fields et cet index créé sur 9 partitions (1 partition par an)
- La table Authors a un index cluster non unique dans les champs [Year, ArId, Aid] et cet index est créé sur la même partition que la table des articles (1 partition par an)
la question est:
Nous devons créer une procédure stockée qui obtient le résultat suivant des deux tables [aide, prénom, adresse électronique] sous les conditions suivantes:
Les auteurs qui ont écrit des articles pendant et après une année donnée (ET)
- Le nombre total d'articles pour l'auteur est supérieur à un nombre spécifique (ET)
- Le nombre des articles écrits par l'auteur sous spécifique ClassNumber est supérieur à un pourcentage spécifique du nombre total de ses articles (AND)
- Recevez seulement l'email le plus récent de l'auteur (dans la dernière année au cours de laquelle il a écrit un article)
- Si l'auteur a plus d'un courriel la même année, obtenez-les tous.
Nous avons besoin de la requête pour prendre le moins de temps possible
Si quelqu'un peut aider, Merci beaucoup.
selon les recommandations du conseiller Tuning j'ai créé les indices suivants: * sur la table Auteurs - [Aide, Arid] - [Aide, Année] - [Aide] * Sur la table des articles: -ClassNumber -ClassNumberYear –
@Darsh mise à jour la réponse. Si cela ne vous aide pas, vous pouvez inclure une requête réelle en question. – dove