Domanda

Di recente ci siamo imbattuti nel Problema del punto di svolta E alcune delle nostre query di report che utilizzate per completare l'esecuzione entro un paio di secondi ora richiedono più di 2 minuti perché l'ottimizzatore di query semplicemente ignora l'indice non cluster sulla colonna di ricerca. Una query di esempio di seguito:

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

Il ID la colonna è indice cluster e Throwtime ha indice non cluster. In questo caso, abbiamo notato che l'ordinamento di throwtime invece di ID Cambiamenti Il piano di query e l'indice non clustering vengono utilizzati. Stiamo anche pianificando di archiviare alcuni dei vecchi dati (attualmente ha 20 mln righe !!). Ma apportare questi cambiamenti nell'applicazione richiederà del tempo e devo trovare un modo per far funzionare i rapporti ragionevolmente veloce, senza apportare modifiche a livello di applicazione (vabbè, tale è la vita!).

Inserisci Guida al piano. Ho creato la guida del piano seguente con un suggerimento di query dell'indice non cluster e per qualche motivo, l'indice non cluster non è ancora utilizzato. Mi sto perdendo qualcosa?

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

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top