このクエリの実行に数分かかる理由を誰か教えてください。
Select
d.DocumentID, d.IsReEfiled, d.IGroupID, d.ITypeID, d.RecordingDateTime,
d.IDate, d.InstrumentID, d.DocumentStatusID,ig.Abbreviation as IGroupAbbreviation,
u.Username, j.JDAbbreviation, inf.DocumentName,
it.Abbreviation as ITypeAbbreviation, d.DocumentDate,
ds.Abbreviation as DocumentStatusAbbreviation
From Documents d
Inner Join IGroupes ig On d.IGroupID = ig.IGroupID
Left Join ITypes it On d.ITypeID = it.ITypeID
Left Join Users u On u.UserID = d.UserID
Left Join DocumentStatuses ds On d.DocumentStatusID = ds.DocumentStatusID
Left Join InstrumentFiles inf On d.DocumentID = inf.DocumentID
Inner Join Jurisdictions j on j.JurisdictionID = d.JurisdictionID
Where
d.DocumentID IN
(SELECT DocumentID
FROM (SELECT ROW_NUMBER() OVER (Order By DocumentID desc) peta_rn, peta_query.*
From (Select d.DocumentID
From Documents d) as peta_query) peta_paged
WHERE peta_rn > 92000 AND peta_rn <= 92100)
サブクエリ:
SELECT DocumentID
FROM (SELECT
ROW_NUMBER() OVER (Order By DocumentID desc) peta_rn, peta_query.*
FROM
(SELECT d.DocumentID
FROM Documents d) as peta_query) peta_paged
WHERE peta_rn > 92000 AND peta_rn <= 92100
それ自体は0秒かかりますが、クエリ全体には数分かかり、結合もそれほど多くありません. 私の意見では、これらすべての外部キーにはインデックスがあるため、それほど多くの問題を引き起こさないはずの6〜7の結合はほとんどありません。誰が問題の可能性があるかを提案できますか?
編集:
これは素晴らしいです。0 秒で実行される次のクエリを参照してください。
Select d.DocumentID, d.IsReEfiled, d.IGroupID, d.ITypeID, d.RecordingDateTime,
d.IDate, d.InstrumentID, d.DocumentStatusID, u.Username, j.JDAbbreviation, inf.DocumentName,
it.Abbreviation as ITypeAbbreviation, d.DocumentDate, ds.Abbreviation as DocumentStatusAbbreviation
From Documents d
Inner Join IGroupes ig On d.IGroupID = ig.IGroupID
Left Join ITypes it On d.ITypeID = it.ITypeID
Left Join Users u On u.UserID = d.UserID
Left Join DocumentStatuses ds On d.DocumentStatusID = ds.DocumentStatusID
Left Join InstrumentFiles inf On d.DocumentID = inf.DocumentID
Inner Join Jurisdictions j on j.JurisdictionID = d.JurisdictionID
Where d.DocumentID IN
(
SELECT DocumentID FROM (SELECT
ROW_NUMBER() OVER (Order By DocumentID desc) peta_rn, peta_query.* From
(
Select d.DocumentID
From Documents d
) as peta_query) peta_paged WHERE peta_rn>92000 AND peta_rn<=92100
)
ご覧のとおりig.Abbreviation IGroupAbbreviation,
、クエリから削除するだけです。私が置くとすぐに、ig.Abbreviation IGroupAbbreviation,
数分かかり始めます。これはばかげたことの高さではありませんか?これは何が原因だと思いますか?
編集2:
もう少し奇妙です。に変更Inner Join IGroupes ig
するとLeft Join IGroupes ig
、クエリは 0 秒で実行されます。内部結合に数分かかる理由を教えてください。これは私の問題ですか?これはSQLサーバーのバグですか? あとは頭を壁にぶつけるだけです。4時間以上無駄にしました。