ورود

View Full Version : کندی سرعت pagination برای 400.000 رکورد در sql server 2008 r2



resident
یک شنبه 26 خرداد 1398, 19:01 عصر
سلام.
من یه ویو دارم که 400.000 رکورد داره.
از sp زیر برای صفحه بندی استفاده می کنم. وقتی تعداد رکورد ها کمتره مثلا 50.000 تا سرعت خوبه اما وقتی 400.000 تا میشه حدود 35 ثانیه طول می کشه تا اجرا بشه و مثلا 10 رکورد رو نمایش بده.

آیا کسی راهکاری داره برای بهبود و بهینه سازی اون؟


ALTER procedure [SelectPaging]
@SelectedColumn nvarchar(max),
@ViewName nvarchar(200),
@PrimaryKeyName nvarchar(100),
@RowCountOnPage int,
@PageNumberDesired int,
@Condition nvarchar(max),
@OrderBy nvarchar(200),
@OrderByAsc bit,
@UserID int,
@ErrorNumber int out,
@TotalRowsCount int out
as
begin
SET NOCOUNT ON;

Begin Try

exec [general].TotalRowsWithFiltering @PrimaryKeyName,@viewName ,@Condition ,@UserID,@TotalRowsCount out,@ErrorNumber out


declare @RowNumberFrom int,@RowNumberTo int
set @RowNumberFrom=((@PageNumberDesired-1)*@RowCountOnPage)
set @RowNumberTo=(@PageNumberDesired*@RowCountOnPage)+ 1

if @Condition='' or @Condition is null
set @Condition=' 1=1 '
else set @Condition=@Condition

if @OrderBy='' or @OrderBy is null
set @OrderBy=@PrimaryKeyName
declare @OrderByAsc_Desc nvarchar(6)
if (@OrderByAsc='false' or @OrderByAsc is null)
set @OrderByAsc_Desc=' Desc'
else if @OrderByAsc='true'
set @OrderByAsc_Desc=' Asc'


declare @SQLQuery nvarchar(max)


set @SQLQuery='SELECT
*
FROM (
SELECT
*,
ROW_NUMBER() OVER (order by '+@OrderBy+' '+@OrderByAsc_Desc+') AS RowNumber
FROM (
SELECT '+@SelectedColumn+'
FROM '+@viewName+' where ' + @Condition +'
) AS d
) AS c
where RowNumber >'+cast(@RowNumberFrom as nvarchar(10))+' and RowNumber < '+cast(@RowNumberTo as nvarchar(10))


EXECUTE sp_executesql @SQLQuery

set @ErrorNumber=@@ERROR

END TRY
BEGIN CATCH

END CATCH

end


کارم ضروریه. لطفا راهنمایی کنید

hamid_hr
دوشنبه 27 خرداد 1398, 09:06 صبح
الان
exec [general].TotalRowsWithFiltering @PrimaryKeyName,@viewName ,@Condition ,@UserID,@TotalRowsCount out,@ErrorNumber out
چیه؟
ویو که توی صورت مسئله هست چیه؟