J'ai une table de contrats qui est grande et que nous avons beaucoup de procédures stockées qui recherchent des contrats avec un statut de Ouvrir. Moins de 10% des contrats sont ouverts et ce nombre diminue à mesure que la BD se développe. J'ai pensé que je pourrais créer une vue indexée des contrats ouverts afin d'accélérer certaines de nos requêtes. Le problème est que l'état n'est pas sur la table de contrat et j'ai besoin d'une sous-requête pour récupérer les données que je veux. (SQL Server ne puis une analyse d'index ordonné en clusters sur la table l'ensemble des questions que je l'ai regardé)Vue indexée de SQL Server 2000 avec sous-requête max
Voici la version condensée de la vue (je l'ai enlevé les 30 autres colonnes de la table des contrats)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[vw_OpenContractsIndexed]
WITH SCHEMABINDING
AS
SELECT c.ContractID
FROM dbo.NMPT_Contract AS c INNER JOIN
dbo.NMPT_ContractStatus AS cs ON c.ContractID = cs.ContractID AND cs.ContractStatusCreated =
(SELECT MAX(ContractStatusCreated) AS Expr1
FROM dbo.NMPT_ContractStatus AS cs2
WHERE (ContractID = c.ContractID)) INNER JOIN
dbo.CMSS_Status AS s ON cs.StatusID = s.StatusID
WHERE (s.StatusCode = 'OPN')
Si je tente de créer un index sur la vue (cluster unique sur contractid
) Je reçois le texte suivant
Échec de création pour l'index
Il contient un ou plusieurs constructions non autorisées. (Microsoft SQL Server, erreur 1936)
De ce que je peux rassembler c'est le Max dans la sous-requête qui est le problème ??
En plus de mettre le statut sur la table de contrats (où je pense personnellement qu'il appartient) sont là des suggestions pour optimiser cette situation. A défaut, d'autres versions de SQL Server autoriseront-elles cette vue indexée?
Si le statusID était sur le contrat je l'indexerais et serait fait avec lui. En l'état, nous avons la même sous-requête dans de nombreuses procédures stockées et la base de données est obligée de déterminer continuellement l'état actuel du contrat. La plupart du temps, nous recherchons des contrats avec un statut actuel d'OPN. Y a-t-il un moyen d'optimiser cela? – PatFromCanada
Plus One pour confirmer le problème avec la vue – PatFromCanada