Вы должны показать полный запрос.
Также в вашем запросе эта вещь мне не понятна and concat(share, nocust) < ‘ZZZZZZZZ’
. Я не получаю, какой тип данных у вас есть и что он будет возвращать или каков ваш ожидаемый результат .
Я думаю, я создам Indexed view
в таком сценарии.
CREATE VIEW dbo.vStockView
WITH SCHEMABINDING
AS
select nocust, [share] ,
0 SortCol
from TB_STOCK
where
-- share = ’BBCA’
-- and concat(share, nocust) < ‘ZZZZZZZZ’
-- and
isnumeric(nocust)=0
union all
select nocust, [share] ,
1 SortCol
from TB_STOCK
where
isnumeric(nocust)=1
GO
Обратите внимание, что я прокомментировал, где условие, потому что это не требуется в представлении. Это может быть реализовано в Proc.
У меня нет полной информации о вашем запросе, таблица.
Поэтому индекс может быть не таким хорошим.
CREATE NONCLUSTERED INDEX CX_vStockView
ON dbo.vStockView(SortCol);
GO
Теперь вы создаете новый процесс, подобный этому,
Create Proc spGETStock
@share varchar(30)
@PageNumber int,
@RowspPage int=30
as
BEGIN
set nocount on
select nocust,[share]
--,count(*)over() as TotalRecords
from vStockView
where share = @share
ORDER BY SortCol
OFFSET ((@PageNumber - 1) * @RowspPage) ROWS
FETCH NEXT @RowspPage ROWS ONLY;
End
Или вы можете реализовать пейджинг с использованием Row_Number
в Sql server 2008
и ниже.
Я уверен, что это значительно улучшит производительность.