посчитать селективность (запомнить однократно),
потом просто сгенерировать пачку псевдослучайных id и выполнить select по ним (IN) с доп. условием на доступность всем. количество id равно количество нужным поделить на селективность. Получили результат. Если недостаточно, генерируем вторую пачку и отбираем остаток. Итого в среднем один запрос с поиском по PK + фильтр. Редко два. Повторяемость обеспечивается выбором и настройкой алгоритма генерации случайных чисел. 2 декабря 2013 г., 17:27 пользователь Михаил Монашёв < [email protected]> написал: > Здравствуйте. > > Есть таблица с объектами в mysql. Новые объекты туда добавляются, > плохие объекты удаляются, бывает что по много штук сразу. Некоторые > объекты имеют статус скрытых от всех, а все остальные доступны для > всех. Т.е. в таблице равномерно растёт id объектов, но между соседними > id могут быть дырки, причём большие. И некоторые объекты показывать > нельзя. > > Даётся текстовая строка. В идеале нужно для этой строке максимально > быстро выбрать из таблицы случайные 3 разных объекта, доступные для > всех. Причём так, чтобы повторные выборы давали те же самые объекты и > изменения таблицы минимально влияли на это. > > Т.е. надо из перла обратиться к mysql-ю минимальное количество раз, > сделав максимально быстрые запросы. Самое важное - скорость. Ей нельзя > жертвовать. Можно жертвовать, но крайне нежелательно, привязкой строки > к объектам. Понятно, что таблица меняется и привязки строк к объектам > будут меняться. Необходимо, чтобы эти изменения были минимальны. Можно > жертвовать количеством выбираемых объектов, например выбирать иногда > не 3, а 2 или 1, но не 0. Можно жертвовать степенью случайности между > выбираемыми объектами, например, выбирая лишь один случайным способом, > а остальные искать поблизости от первого. Нельзя жертвовать охватом > объектов таблицы, т.е. выбираться объекты должны среди всех не скрытых > объектов. > > -- > С уважением, > Михаил mailto:[email protected] > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
