سلام.
من یه ویو دارم که 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
کارم ضروریه. لطفا راهنمایی کنید