Ich habe eine Reihe von TabellenSQL Server 2014 Tabelle/Abfrage-Optimierung
dbo.Store_000
dbo.Store_001
....
dbo.Store_216
den Verkauf von verschiedenen Geschäften enthalten, wobei relevante Felder sind
Username, ItemID, Description, CreatedDate, CountryID
ich die letzten 20 Verkäufe extrahieren müssen aus alle Geschäfte und ich schrieb die folgende Abfrage:
select top 20 UserName, ItemID, Description, CreatedDate, CountryID
FROM (
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_000
UNION ALL
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_001
UNION ALL
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_002
.....
...
UNION ALL
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_216
) ii
order by ii.createdDate desc
derzeit Tabellen enthält einige 200M Datensätze (alle togethe r)
deshalb die Verarbeitungszeit zu reduzieren Ich habe den folgenden Index für jede Tabelle:
CREATE NONCLUSTERED INDEX I2_Store000 ON dbo.Store_000
(UserName)
INCLUDE (itemId, Description, CreatedDate, CountryID)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
aber es dauert immer noch zu viel (einige Minuten auf unserer Maschine)
können Sie vorschlagen, wie zur Verbesserung des die Abfrage und oder der Index, um die Verarbeitungszeit zu reduzieren?
sollte ich den Index basierend auf CreatedDate erstellen, da das das Sortierfeld ist?
Wenn es helfen kann, kann HERE den MSSMS-Ausführungsplan finden.
dank
Eralper korrekt ist. Außerdem ignorieren Sie die Datensatztheorie, indem Sie Datensätze als Cursor behandeln und im Wesentlichen 21 verschiedene Abfragen ausführen. Das Internet ist voll von produktiven Tutorials zum Erstellen von Abfragen, wie zum Beispiel gedankenbot.com, blog.SQLAuthority und TECHNET. Für eine schnelle Auffrischung der Abfrage, lesen Sie [Thoughtbot-Seite] (https://robots.thoughtbot.com/back-to-basics-sql). –
Hallo, was meinst du mit 'Data Set Theory 'durch Behandeln von Datensätzen als Cursor und im Wesentlichen 21 verschiedene Abfragen laufen? Wo kann ich etwas finden? – Joe
Eine Art, Datenbanksprachen zu sagen, sind keine zeilenweisen Sprachen wie C++ und Behandlungstabellen (Datensätze) als Ganzes. Auschecken SQLMag [T-SQL-Grundlagen: Denken in Sets] (http://sqlmag.com/t-sql/t-sql-foundations-thinking-sets) –