Как выбрать N случайных записей из таблицы за раз без повторения записей, ранее возвращенных одной и той же операцией?
Очевидное решение:
SELECT TOP 5 * FROM
MyTable
WHERE Id NOT IN (SELECT Id FROM PreviouslyReturned)
ORDER BY newid()
Но разве это не будет действительно неэффективно, когда MyTable начнет расти?
У меня длинный список записей, и мне нужно по пять записей за раз для пошаговой игры без повторения каких-либо записей, уже собранных для данной игры. Поскольку я знаю приблизительно, сколько ходов произойдет, я мог бы выбрать случайную выборку до начала игры, которая будет довольно большой, но я бы предпочел, чтобы она была «динамичной». Я нашел этот вопрос , который использует случайное начальное число с MySQL.
Со временем будет так много записей, что повторение не будет проблемой (записи >> N), но до тех пор мне нужно, чтобы записи были уникальными. В качестве идентификатора я использую Fluent NHibernate для своего слоя постоянства; возможно, в NHibernate есть какая-то особенность, которая позволяет это.