Я пытаюсь получить случайную строку из таблицы, где данные не меняются. Я читал, что люди пытаются ORDER BY RAND (), что плохо для больших наборов данных и плохо масштабируется.
Я также видел решение, которое заключается в том, чтобы SQL получал случайную строку между минимальным / максимальным диапазоном, например так: FLOOR (MAX (required_id) * RAND), но это будет работать только тогда, когда строки являются последовательными: 1 , 2,3,4,5,6,7,8,9,10.
Данные, которые мне нужно извлечь, не являются последовательными, например: 1,2,3,4,10,11,12,13
Так что я думаю, что есть два решения:
1-е решение:
Продолжайте это: ЭТАЖ (МАКС. (Необходимый_идентификатор) * RAND) , пока я не получу строку нужного типа (шанс 1/6)
2-е решение:
Создайте дубликат таблицы (так как мои данные никогда не изменятся) примерно так:
temp_id | needed_id | type
1 1 1
2 4 1
3 7 2
3 8 2
Так что я могу извлечь случайный temp_id, используя этот метод: FLOOR (MAX (temp_id) * RAND) - WHERE type = 1
Что ты думаешь? Скорее всего, 1-е решение будет запущено примерно 6 раз, пока я не получу правильную строку, но во 2-м решении это сработает сразу, но для этого потребуется другая таблица.