私はテーブルの関連フィールドが、私はから最新の20台の販売を抽出する必要がSQL Serverの2014テーブル/クエリの最適化
Username, ItemID, Description, CreatedDate, CountryID
ある異なる店舗の売上を含む
dbo.Store_000
dbo.Store_001
....
dbo.Store_216
、のセットを持っていますすべてのストアと私は次のクエリを書いた:
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
現在、テーブルには200MレコードR)
そのため、処理時間を短縮するために、私はテーブルごとに、次のインデックス作成: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]
をそれはまだあまりにも(私たちのマシンにいくつかの分)
は、あなたがどのように改善するか提案することができますかかりますクエリやインデックスを処理時間を短縮するには?
ソートフィールドなので、CreatedDateに基づいてインデックスを作成する必要がありますか?
もし役に立つことがあれば、HEREはMSSMS実行計画を見つけることができます。
おかげ
Eralperは正しいです。また、レコードをカーソルとして扱い、本質的に21の異なるクエリを実行することによって、データセット理論を無視しています。 インターネットには、thoughtbot.com、blog.SQLAuthority、TECHNETなどのクエリ作成に関する生産的なチュートリアルが豊富に用意されています。クエリの簡単な再読み込みについては、[Thoughtbotのページ](https://robots.thoughtbot.com/back-to-basics-sql)を参照してください。 –
こんにちは、レコードをカーソルとして扱うことで、 'Data Set Theory 'とはどういう意味ですか?基本的に21の異なるクエリを実行していますか?それについて何かを見つけることができます。 – Joe
データベース言語を言う1つの方法は、C++のような行単位の言語ではなく、テーブル(データセット)全体を扱うことです。 SQLMagの[T-SQLの基礎:Thinking In Sets](http://sqlmag.com/t-sql/t-sql-foundations-thinking-sets) –