PDA

View Full Version : درخواست تحلیل دو sp



Iran58
شنبه 24 آبان 1393, 11:11 صبح
سلام
من دو sp زیر را نوشته ام
ALTER PROC [dbo].[sp_SYS_WalkieTalkie_Battery_SelectAll_ByFilter]
(
@Brand nvarchar(50),
@Model nvarchar(50),
@SrialNumber nvarchar(50),
@Status nvarchar(50),
@Description nvarchar(MAX)
)
AS
BEGIN
SELECT
wtb.Id,
ROW_NUMBER() OVER (ORDER BY wtb.Id) AS Row,
wtb.Brand,
br.Name AS BrandName,
wtb.Model,
wtb.SrialNumber,
wtb.[Status],
s.Name AS StatusName,
wtb.[Description]
FROM
SYS_WalkieTalkie_Battery AS wtb
INNER JOIN
SYS_Brand as br
ON
wtb.Brand=br.Id
INNER JOIN
SYS_Status AS s
ON
wtb.[Status]=s.Id
WHERE
(wtb.Brand like @Brand +'%')
AND
(wtb.Model like @Model +'%')
AND
(wtb.SrialNumber like @SrialNumber +'%')
AND
(wtb.[Status] like @Status +'%')
AND
(wtb.[Description] like @Description +'%')

END
-----
ALTER PROC [dbo].[SP_SYS_WalkieTalkie_Battery_SelectAll]
AS
BEGIN
SELECT
wtb.Id,
ROW_NUMBER() OVER (ORDER BY wtb.Id) AS Row,
wtb.Brand,
br.Name AS BrandName,
wtb.Model,
wtb.SrialNumber,
wtb.[Status],
s.Name AS StatusName,
wtb.[Description]
FROM
SYS_WalkieTalkie_Battery AS wtb
INNER JOIN
SYS_Brand as br
ON
wtb.Brand=br.Id
INNER JOIN
SYS_Status AS s
ON
wtb.[Status]=s.Id
END
با توجه به ps های بالا آیا می توان از sp اول در فراخوانی کلیه داده برای نمایش در یک دیتاگرید استفاده کنم یا باید از sp2 استفاده کنم
ودرضمن برای جستجو sp اولی کافی است ویا باید برای هر یک از موارد (ستونهای جدول)یک spمجزا بنویسم
باتشکر

حمیدرضاصادقیان
شنبه 24 آبان 1393, 17:55 عصر
سلام.
برای بررسی شرایط SP ها بهتره بهش مقدار بدید و قبل از اینکه اجرا کنید ابتدا Set Statistics io ON رو اجرا کنید بعد SP اول رو اجرا کنید و نتیجه اونو اینجا بذارید تا بررسی بشه.
به غیر از این موارد ، نیاز هست که Plan مربوطه نیز بررسی بشه تا بتوان دقیقتر نظر داد.
ولی در حالت کلی ، مشکل خاصی نداره و اگر در Where Clause ها از like با %% کار نکنید مشکل خاصی نداره.چون % در اول عبارت Like باعث میشه از ایندکس نتونه بر روی اون فیلد استفاده کنه و Clustered Index Scan در Plan شما رخ میده که باعث میشه تمام جدول شما رو جستجو کنه.