Wir sind kürzlich auf das Problem mit dem Wendepunkt gestoßen, und einige unserer Berichtsabfragen, die die Ausführung innerhalb weniger Sekunden abgeschlossen haben, dauern jetzt mehr als 2 Minuten, da das Abfrageoptimierungsprogramm den nicht gruppierten Index in der Suchspalte einfach ignoriert. Eine Beispielabfrage unten:
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
Die ID
Spalte ist Clustered Index und Throwtime
hat Nonclustered Index. In diesem Fall haben wir festgestellt, dass throwtime
anstelle von ID
Änderungen der Abfrageplan und der nicht gruppierte Index sortiert werden. Wir planen auch, einige der alten Daten zu archivieren (derzeit sind 20 Mio. Zeilen vorhanden !!). Das Vornehmen dieser Änderungen in der Anwendung wird jedoch einige Zeit in Anspruch nehmen, und ich muss einen Weg finden, um Berichte relativ schnell auszuführen, ohne Änderungen auf Anwendungsebene vorzunehmen (na ja, so ist das Leben!).
Planführer eingeben. Ich habe den folgenden Planleitfaden mit einem Hinweis zur nicht gruppierten Indexabfrage erstellt. Aus irgendeinem Grund wird der nicht gruppierte Index immer noch nicht verwendet. Vermisse ich etwas
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
throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'
zu throwtime >= '20140320 07:00' AND throwtime < '20140324 07:00';
- bitte lesen Sie diesen Blog-Beitrag und auch diesen .