2つのテーブル(SQL Server 2008)があります:ドキュメントとフィールド。
ドキュメント:
Id (PK)
Some-Others-Columns
田畑:
Id (PK)
DocumentId (FK to Documents)
Name
Value
すべてのドキュメントには80以上のフィールドが割り当てられています。すべての行がドキュメント+いくつかの特定のフィールド(80以上ではなく、一部のフィールドのみ)であるテーブルを選択する必要があります。
大きなテーブルでは非常に低速で動作するT-SQLコードがありますが、どうすればそれを最適化できますか?
SELECT f1.Value AS 'f1', f2.Value AS 'f2', f3.Value AS 'f3', f4.Value AS 'f4', f5.Value AS 'f5', f6.Value AS 'f6', d.PartyId, d.CreationDate
FROM dbo.Fields AS f WITH (NOLOCK)
INNER JOIN dbo.Fields AS f1 ON f.Id = f1.Id
INNER JOIN dbo.Documents AS d ON f1.DocumentId = d.Id
INNER JOIN dbo.Fields AS f2 ON d.Id = f2.DocumentId
INNER JOIN dbo.Fields AS f3 ON d.Id = f3.DocumentId
INNER JOIN dbo.Fields AS f4 ON d.Id = f4.DocumentId
INNER JOIN dbo.Fields AS f5 ON d.Id = f5.DocumentId
INNER JOIN dbo.Fields AS f6 ON d.Id = f6.DocumentId
WHERE
(f1.Name = 'Some-Name-1')
AND (f2.Name = 'Some-Name-2')
AND (f3.Name = 'Some-Name-3')
AND (f4.Name = 'Some-Name-4')
AND (f5.Name = 'Some-Name-5')
AND (f6.Name = 'Some-Name-6')
このクエリを最適化するのを手伝ってください