Permenkaret
20th November 2011, 12:25 PM
gan ane mau tanya dnk
ane ada SP :
Spoiler for SP:
Code:
ALTER PROCEDURE [dbo].[PmyProc]
(
@grup varchar(50) = NULL,
@branch varchar(50) = NULL,
@tahun varchar(3) = NULL,
@obj VARCHAR(4) = NULL
)
AS
SET NOCOUNT ON
IF @branch = '' OR @branch = '0000'
BEGIN
SET @grup = NULL
END
IF @grup = ''
BEGIN
SET @grup = NULL
END
IF @tahun = ''
BEGIN
SET @tahun = NULL
END
SELECT distinct c.xx, c.xx2
FROM dbo.tbl1 (NOLOCK) a
INNER JOIN dbo.tbl2 (NOLOCK) b ON a.dealer = b.dealer AND a.cabang = b.cabang
INNER JOIN dbo.tbl3 (NOLOCK) c ON c.xx = b.xx
LEFT OUTER JOIN dbo.tbl4 (NOLOCK) d ON b.dealer = d.dealer AND b.cabang = d.cabang
LEFT OUTER JOIN dbo.tbl5 (NOLOCK) e ON d.grup = e.grup
WHERE a.f4 = 1
AND
(
@Grup IS NULL
Or (e.Grup = @Grup AND e.f5 = 1 AND d.f6 = 1)
Or b.dealer = @Grup
)
AND
(
@branch IS NULL
Or b.cabang = @branch
)
AND
(
@tahun IS NULL
Or b.tahun = @tahun
)
AND
(
@obj IS NULL
Or b.obj = @obj
)
trus ane jalankan dengan parameter
Code:
exec myProc @branch='0000',@Group='JA20',@Obj='001',@tahun='20 11'
setelah ane jalankan dengan code diatas, jasil querynya baru keluar setelah 40 detik an
Sedangkan dengan parameter yg sama, ane jalankan isi dari SP diatas secara langsung tanpa pake SP dengan paramter yang sama... hasil nya lsg keluar setelah 0-1 detik
query yang ane pake :
Spoiler for query:
Code:
Declare @HQBranchID VARCHAR(50),
@GroupID VARCHAR(50),
@ObjectCode VARCHAR(3),
@YearPoint VARCHAR(4)
SET @branch= '0000'
SET @Group = 'JA20'
SET @Obj = '001'
SET @tahun = '2011'
SET NOCOUNT ON
IF @branch = '' OR @branch = '0000'
BEGIN
SET @grup = NULL
END
IF @grup = ''
BEGIN
SET @grup = NULL
END
IF @tahun = ''
BEGIN
SET @tahun = NULL
END
SELECT distinct c.xx, c.xx2
FROM dbo.tbl1 (NOLOCK) a
INNER JOIN dbo.tbl2 (NOLOCK) b ON a.dealer = b.dealer AND a.cabang = b.cabang
INNER JOIN dbo.tbl3 (NOLOCK) c ON c.xx = b.xx
LEFT OUTER JOIN dbo.tbl4 (NOLOCK) d ON b.dealer = d.dealer AND b.cabang = d.cabang
LEFT OUTER JOIN dbo.tbl5 (NOLOCK) e ON d.grup = e.grup
WHERE a.f4 = 1
AND
(
@Grup IS NULL
Or (e.Grup = @Grup AND e.f5 = 1 AND d.f6 = 1)
Or b.dealer = @Grup
)
AND
(
@branch IS NULL
Or b.cabang = @branch
)
AND
(
@tahun IS NULL
Or b.tahun = @tahun
)
AND
(
@obj IS NULL
Or b.obj = @obj
)
Yang menyebabkan SP lama adalah
Code:
@branch IS NULL
Or b.cabang = @branch
karena nilai @Branch adalah '0000'
maka dari query diatas nilai @branch ane diset menjadi null
bagian inilah yg menyebabkan SP ane menjadi lama
pertanyaan yg ingin nyubi tanyakan adalah :
kenapa pas di SP, hasil baru keluar setelah 40an detik
sedang pada query langsung, hasil sudah keluar dalam waktu kurang dari 1 detik
</div>
ane ada SP :
Spoiler for SP:
Code:
ALTER PROCEDURE [dbo].[PmyProc]
(
@grup varchar(50) = NULL,
@branch varchar(50) = NULL,
@tahun varchar(3) = NULL,
@obj VARCHAR(4) = NULL
)
AS
SET NOCOUNT ON
IF @branch = '' OR @branch = '0000'
BEGIN
SET @grup = NULL
END
IF @grup = ''
BEGIN
SET @grup = NULL
END
IF @tahun = ''
BEGIN
SET @tahun = NULL
END
SELECT distinct c.xx, c.xx2
FROM dbo.tbl1 (NOLOCK) a
INNER JOIN dbo.tbl2 (NOLOCK) b ON a.dealer = b.dealer AND a.cabang = b.cabang
INNER JOIN dbo.tbl3 (NOLOCK) c ON c.xx = b.xx
LEFT OUTER JOIN dbo.tbl4 (NOLOCK) d ON b.dealer = d.dealer AND b.cabang = d.cabang
LEFT OUTER JOIN dbo.tbl5 (NOLOCK) e ON d.grup = e.grup
WHERE a.f4 = 1
AND
(
@Grup IS NULL
Or (e.Grup = @Grup AND e.f5 = 1 AND d.f6 = 1)
Or b.dealer = @Grup
)
AND
(
@branch IS NULL
Or b.cabang = @branch
)
AND
(
@tahun IS NULL
Or b.tahun = @tahun
)
AND
(
@obj IS NULL
Or b.obj = @obj
)
trus ane jalankan dengan parameter
Code:
exec myProc @branch='0000',@Group='JA20',@Obj='001',@tahun='20 11'
setelah ane jalankan dengan code diatas, jasil querynya baru keluar setelah 40 detik an
Sedangkan dengan parameter yg sama, ane jalankan isi dari SP diatas secara langsung tanpa pake SP dengan paramter yang sama... hasil nya lsg keluar setelah 0-1 detik
query yang ane pake :
Spoiler for query:
Code:
Declare @HQBranchID VARCHAR(50),
@GroupID VARCHAR(50),
@ObjectCode VARCHAR(3),
@YearPoint VARCHAR(4)
SET @branch= '0000'
SET @Group = 'JA20'
SET @Obj = '001'
SET @tahun = '2011'
SET NOCOUNT ON
IF @branch = '' OR @branch = '0000'
BEGIN
SET @grup = NULL
END
IF @grup = ''
BEGIN
SET @grup = NULL
END
IF @tahun = ''
BEGIN
SET @tahun = NULL
END
SELECT distinct c.xx, c.xx2
FROM dbo.tbl1 (NOLOCK) a
INNER JOIN dbo.tbl2 (NOLOCK) b ON a.dealer = b.dealer AND a.cabang = b.cabang
INNER JOIN dbo.tbl3 (NOLOCK) c ON c.xx = b.xx
LEFT OUTER JOIN dbo.tbl4 (NOLOCK) d ON b.dealer = d.dealer AND b.cabang = d.cabang
LEFT OUTER JOIN dbo.tbl5 (NOLOCK) e ON d.grup = e.grup
WHERE a.f4 = 1
AND
(
@Grup IS NULL
Or (e.Grup = @Grup AND e.f5 = 1 AND d.f6 = 1)
Or b.dealer = @Grup
)
AND
(
@branch IS NULL
Or b.cabang = @branch
)
AND
(
@tahun IS NULL
Or b.tahun = @tahun
)
AND
(
@obj IS NULL
Or b.obj = @obj
)
Yang menyebabkan SP lama adalah
Code:
@branch IS NULL
Or b.cabang = @branch
karena nilai @Branch adalah '0000'
maka dari query diatas nilai @branch ane diset menjadi null
bagian inilah yg menyebabkan SP ane menjadi lama
pertanyaan yg ingin nyubi tanyakan adalah :
kenapa pas di SP, hasil baru keluar setelah 40an detik
sedang pada query langsung, hasil sudah keluar dalam waktu kurang dari 1 detik
</div>