Что мешает «Выбрать первую * из TableName with (nolock)» от возврата результата?

В настоящее время я выполняю следующий оператор

select * into adhoc..san_savedi from dps_san..savedi_record

Это занимает мучительно много времени, и я хотел бы посмотреть, как далеко он продвинулся, поэтому я выполнил это:

select count(*) from adhoc..san_savedi with (nolock)

Это ничего не вернуло своевременно, поэтому черт возьми, я сделал это:

select top 1 * from adhoc..san_savedi with (nolock)

Даже это, кажется, работает бесконечно. Я мог бы понять, что если есть миллионы записей, то count(*) может занять много времени, но я не понимаю, почему выбор 1 верхней записи не вернется почти сразу, учитывая, что я указал nolock.

Во имя полного раскрытия, dps_san — это представление, которое извлекается из соединения odbc через связанный сервер. Я не думаю, что это повлияет на то, почему я не могу вернуть верхнюю строку, а просто выбрасываю ее на случай, если я ошибаюсь.

Итак, я хочу знать, что мешает этому оператору работать?

РЕДАКТИРОВАТЬ:

Как я упоминал выше, да, dps_san..savedi_record — это представление. Вот что он делает:

select * from DPS_SAN..root.SAVEDI_RECORD

Это не более чем псевдоним и не выполняет группировку/сортировку/и т.д., поэтому я не думаю, что проблема здесь, но, пожалуйста, просветите меня, если я ошибаюсь.

10
задан Brandon Moore 8 June 2012 в 20:53
поделиться