これは私の見解です:
CREATE VIEW [Products].[VProductFull] AS
SELECT
[Pr].[Id],
[Pr].[Title],
[Pr].[IsScanAllowed],
[Pr].[Category_Id],
[Cat].[Title] AS [Category],
[Cat].[MajorCategory_Id],
[Mc].[Title] AS [MajorCategory]
FROM [Products].[Product] AS [Pr]
INNER JOIN [Products].[Category] AS [Cat] ON [Pr].[Category_Id] = [Cat].[Id]
INNER JOIN [Products].[MajorCategory] AS [Mc] ON [Cat].[MajorCategory_Id] = [Mc].[Id];
GO
そして、取得するにはSPが必要です。2つのVProductFull
SPMajorCategoryId
があり、最初の1つはビューの作成などの結合を使用し、2つ目は独自のビューを使用します。
-- SP#1
CREATE PROCEDURE [Products].[GetFullProductByMajorCategory](
@MajorCategoryid [bigint]
)
AS
BEGIN
BEGIN TRANSACTION [FullProductByMajor]
SELECT
[Pr].[Id],
[Pr].[Title],
[Pr].[IsScanAllowed],
[Pr].[Category_Id],
[Cat].[Title] AS [Category],
[Cat].[MajorCategory_Id],
[Mc].[Title] AS [MajorCategory]
FROM [Products].[Product] AS [Pr]
INNER JOIN [Products].[Category] AS [Cat] ON [Pr].[Category_Id] = [Cat].[Id]
INNER JOIN [Products].[MajorCategory] AS [Mc] ON [Cat].[MajorCategory_Id] = [Mc].[Id]
WHERE [Mc].[Id] = @MajorCategoryid;
COMMIT TRANSACTION [FullProductByMajor]
END
GO
と
-- SP#2
CREATE PROCEDURE [Products].[GetFullProductByMajorCategory](
@MajorCategoryid [bigint]
)
AS
BEGIN
BEGIN TRANSACTION [FullProductByMajor]
SELECT
[VPF].[Id],
[VPF].[Title],
[VPF].[IsScanAllowed],
[VPF].[Category_Id],
[VPF].[Category],
[VPF].[MajorCategory_Id],
[VPF].[MajorCategory]
FROM [Products].[VProductFull] AS [VPF]
WHERE [VPF].[MajorCategory_Id] = @MajorCategoryid;
COMMIT TRANSACTION [FullProductByMajor]
END
GO
上記のSPのどれがより速く戻り、より良いパフォーマンスを持っていますか?なぜ?また、SPを超えるよりも、パフォーマンスを向上させて高速化するVProductFull
別の方法はありますか?MajorCategoryId