2011-01-12 7 views
1

Ich habe eine Liste der Newsletter in meiner Website ausgelagert und ich verwende diese Ansicht, um es zu laden.Sql Server 2005 COUNT auf Sicht dauert zu lange

Dies ist die Ansicht (ohne die Liste der Spalten ausgewählt):

 
SELECT * FROM dbo.NewsletterHistory 
INNER JOIN dbo.Newsletter ON dbo.NewsletterHistory.NewsletterId = dbo.Newsletter.NewsletterId 
INNER JOIN dbo.sysNewsletterHistoryState ON dbo.NewsletterHistory.sysNewsletterHistoryStateId = dbo.sysNewsletterHistoryState.sysNewsletterHistoryStateId 
LEFT JOIN dbo.Client ON dbo.NewsletterHistory.AboutUserId = dbo.Client.ParentUserId 

Das Problem erscheint, wenn ich versuche, eine Abfrage der Anzahl, um die ausgelagerten Liste anzuzeigen auszuführen.

In NewsletterHistory Tabelle habe ich etwa 700.000 Zeilen.

 
select count(*) from dbo.NewsletterHistoryView newsletter0_ where newsletter0_.DeliveryMethod 11 

Diese Zählerabfrage dauert etwa 33 Sekunden.

Ich kann diese Anzahl der Datensätze nicht einfach irgendwo speichern, weil die ausgelagerte Liste gefiltert werden kann.

Irgendwelche Ideen zur Lösung dieses Problems?

+0

Welche Indizes haben Sie an Ort und Stelle? – AdaTheDev

+0

Hatten Sie einen Index für Spalten in Joins und wo? –

+0

haben Sie nie über die Verwendung von Index nachgedacht? – heximal

Antwort

3

einen Index für die NewsletterHistory Tabelle erstellen mit den folgenden Spalten

NewsletterId 
sysNewsletterHistoryStateId 
AboutUserId 

Ich weiß, dass Ihre Daten nicht, so verschiedene Aufträge der drei Säulen versuchen die schnellste zu finden. Wenn es immer noch nicht schnell genug ist, gib mir mehr Infos.

0

Anstatt Count (*) zu verwenden, können Sie Count (PrimaryID) verwenden.

+2

Das ist wahrscheinlich kein Vorteil. SQL Server hat seine "Ineffizienz" im Zeitrahmen 2000 überwunden. –

0

Ausführungsplan anzeigen und fehlende Indizes hinzufügen.

0

eine hässliche Lösung .... Ihre Ergebnisse in eine temporäre Tabelle werfen tun, die ... aber ich würde mit Indizes gehen ...

Verwenden Sie das SQL Server Management Studio -> Werkzeuge -> Datenbank Engine Tuning Advisor ... platziere alle deine Skripte, die diese Tabelle verwenden und lass dir sagen, was die besten zu erstellenden Indizes sind. Es hilft irgendwie, es manuell zu tun ... durch Trail und Fehler