Ваш подход с использованием SELECT TOP x ... ORDER BY NEWID()
в основном назначит случайное число каждой отдельной записи в результирующем запросе после объединения всех таблиц и т. Д., А затем отсортирует запрос по этому номеру, возвращая только первое x
строки. Для запроса, который возвращает многие 100 000 записей, этот подход обязательно будет медленным.
Если ваша основная таблица Asmuo
содержит большинство записей, а другие таблицы являются просто справочными таблицами, выможно попытаться использовать предложение TABLESAMPLE
на вашей основной таблице, например:
SELECT TOP 8
...
FROM
Asmuo TABLESAMPLE (100 ROWS) AS a
INNER JOIN
...
Нет ORDER BY NEWID()
необходимо. Причина, по которой мы выбираем 100 строк в TABLESAMPLE, заключается в том, что количество фактически выбранных записей может варьироваться. Дополнительная информация здесь .
Если это все еще не позволяет выполнить запрос достаточно быстро, убедитесь, что объединяемые таблицы правильно проиндексированы.