Я создал вид, используя
CREATE VIEW NewView AS
WITH TableA AS
(
SELECT * FROM RealTableA WITH (ROWLOCK, UPDLOCK, READPAST) WHERE (Something1)
)
,
TableB AS
(
SELECT * FROM RealTableB WITH (ROWLOCK, READPAST) WHERE (Something2)
)
SELECT * FROM TableA INNER JOIN TableB ON (TableA.ID = TableB.RefID)
и все работает гладко - два процесса, выполняющиеся одновременно, выбирая из представления, будут выбирать разные записи из него. Проблема в том, что теперь я хочу использовать предложение ORDER BY
, и хотя я использовал
CREATE NONCLUSTERED INDEX IX_SOMEINDEX ON RealTableB ( Field1 ASC , Field2 ASC ) INCLUDE ( RefID )
все тормозит при использовании
SELECT TOP (@Something) * FROM NewView ORDER BY Field1 ASC , Field2 ASC
Я имею в виду, Process1 правильно выбирает первые @Something
результаты, но Process2 ничего не возвращает, что указывает на возможную блокировку таблицы (но почему, если у меня есть индекс по полям, по которым я упорядочиваю?). Однако, если я уберу предложение ORDER BY
, оно будет работать хорошо, но без желаемого порядка. Я попробовал WITH ( INDEX ( IX_SOMEINDEX ) )
в CTE, но это не сработало. Мне действительно нужно сделать эту работу как можно скорее. Может кто-нибудь помочь мне?