私のSQL Server CE上で動作し、次のSQLクエリを持っている4SQL Serverでこのクエリのパフォーマンスを修正する方法Compact Editionの4
SELECT [Join_ReleaseMinDatePost].[FK_MovieID]
FROM (
SELECT [FK_MovieID], MIN([DatePost]) AS [ReleaseMinDatePost]
FROM [Release]
GROUP BY [FK_MovieID]
) [Join_ReleaseMinDatePost]
INNER JOIN
(
SELECT COUNT([ID]) AS [FolderCount], [FK_MovieID]
FROM [MovieFolder]
GROUP BY [FK_MovieID]
) [Join_MovieFolder]
ON [Join_MovieFolder].[FK_MovieID] = [Join_ReleaseMinDatePost].[FK_MovieID]
このクエリの実行に時間がかかるが、私はパートを変更した場合
SELECT 1 AS [FolderCount], [FK_MovieID] FROM [MovieFolder]
へ
SELECT COUNT([ID]) AS [FolderCount], [FK_MovieID] FROM [MovieFolder] GROUP BY [FK_MovieID]
だから、完全なクエリが
なり、パフォーマンスが非常に高速になります。
問題は、それだけで撮影した場合に変更された部分がかなり速いことです。何らかの理由で最初のクエリの実行計画では、インデックススキャンの「実際の行数」が160,016であり、MovieFolderテーブルの行の合計数は2,192であることが示されています。 、「推定行数」は2,192です。
私は問題が行の数にあると思うが、なぜそれがすべて乱れているのか理解できない。
任意の助けが理解されるであろう:)テーブルの おかげ
スキーマは、私はあなたがcorrelated subquery問題に実行していると思う
CREATE TABLE [Release] (
[ID] int NOT NULL
, [FD_ForumID] int NOT NULL
, [FK_MovieID] int NULL
, [DatePost] datetime NULL
);
GO
ALTER TABLE [Release] ADD CONSTRAINT [PK__Release__0000000000000052] PRIMARY KEY ([ID]);
GO
CREATE INDEX [IX_Release_DatePost] ON [Release] ([DatePost] ASC);
GO
CREATE INDEX [IX_Release_FD_ForumID] ON [Release] ([FD_ForumID] ASC);
GO
CREATE INDEX [IX_Release_FK_MovieID] ON [Release] ([FK_MovieID] ASC);
GO
CREATE UNIQUE INDEX [UQ__Release__0000000000000057] ON [Release] ([ID] ASC);
GO
CREATE TABLE [MovieFolder] (
[ID] int NOT NULL IDENTITY (1,1)
, [Path] nvarchar(500) NOT NULL
, [FK_MovieID] int NULL
, [Seen] bit NULL
);
GO
ALTER TABLE [MovieFolder] ADD CONSTRAINT [PK_MovieFolder] PRIMARY KEY ([ID]);
GO
CREATE INDEX [IX_MovieFolder_FK_MovieID] ON [MovieFolder] ([FK_MovieID] ASC);
GO
CREATE INDEX [IX_MovieFolder_Seen] ON [MovieFolder] ([Seen] ASC);
GO
CREATE UNIQUE INDEX [UQ__MovieFolder__0000000000000019] ON [MovieFolder] ([ID] ASC);
GO
CREATE UNIQUE INDEX [UQ__MovieFolder__0000000000000020] ON [MovieFolder] ([Path] ASC);
GO
クエリの目的は何ですか?なぜあなたは何のためにカウントを使用していないときに、各映画のカウントのリストを内部に参加する必要がありますか? – Alex
これは大きなクエリの一部ですが、私は減速を作り出していた部分を分離し、他の人がそれを理解できないようにしました:) – Karim
あなたはSELECTを "SELECT [Join_ReleaseMinDatePost]に変更できます。[FK_MovieID]、[ReleaseMinDatePost]、[FolderCount] "より意味が分かります:) – Karim