Question

Nous avons récemment rencontré le Problème de point de basculement Et certaines de nos requêtes de rapport qui ont utilisé pour terminer l'exécution en quelques secondes prennent maintenant plus de 2 min car l'optimiseur de requête ignore simplement l'index non cluster sur la colonne de recherche. Un exemple de requête ci-dessous:

select top 100 *
from   [dbo].[t_Call]
where  ID > 0 
  and  throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'
order by id

La ID la colonne est index en cluster et Throwtime a un index non cluster. Dans ce cas, nous avons remarqué que la commande par throwtime à la place de ID Modifie le plan de requête et l'index non cluster est utilisé. Nous prévoyons également d'archiver certaines des anciennes données (il dispose actuellement de 20 MLN de lignes !!). Mais apporter ces modifications dans l'application va prendre un certain temps et je dois trouver un moyen de faire fonctionner les rapports assez rapidement, sans apporter de modifications au niveau de l'application (eh bien, telle est la vie!).

Entrez le guide du plan. J'ai créé le guide du plan ci-dessous avec un indice de requête index non cluster et pour une raison quelconque, l'index non cluster n'est toujours pas utilisé. Est-ce que je manque quelque chose?

EXEC sp_create_plan_guide 
@name = N'[prod2reports_callthrowtime]', 
@stmt = N'select top 100 *
          from   [dbo] . [t_Call]
          where  ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID',
@type = N'SQL', 
@module_or_batch = N'select top 100 *
                     from   [dbo] . [t_Call]
                     where  ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID', 
@params = N'@0 int, @1 datetime, @2 datetime', 
@hints = N'OPTION (TABLE HINT( [dbo] . [t_Call],
                   INDEX(IDX_NC_t_call_ThrowtimeProblemCodes)))'
GO

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top