<div>Вот это хороший вариант, но недетерминированный по времени выполнения, против чего Михаил уже возражал.</div><div>Особенно много промахов будет вначале, пока объектов в таблице немного.</div><div> </div><div>02.12.2013, 16:52, "Akzhan Abdulin" <akzhan.abdulin@gmail.com>:</div><blockquote type="cite"><div>посчитать селективность (запомнить однократно),<div> </div><div>потом просто сгенерировать пачку псевдослучайных id и выполнить select по ним (IN) с доп. условием на доступность всем.  количество id равно количество нужным поделить на селективность.</div><div> </div><div>Получили результат. Если недостаточно, генерируем вторую пачку и отбираем остаток.</div><div> </div><div>Итого в среднем один запрос с поиском по PK + фильтр. Редко два.</div><div> </div><div>Повторяемость обеспечивается выбором и настройкой алгоритма генерации случайных чисел.</div><div> </div></div><div><br /><br /><div>2 декабря 2013 г., 17:27 пользователь Михаил Монашёв <span><<a href="mailto:postmaster@softsearch.ru" target="_blank">postmaster@softsearch.ru</a>></span> написал:<br /><blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex;">Здравствуйте.<br /> <br /> Есть  таблица  с  объектами  в  mysql. Новые объекты туда добавляются,<br /> плохие  объекты  удаляются,  бывает что по много штук сразу. Некоторые<br /> объекты  имеют  статус  скрытых  от всех, а все остальные доступны для<br /> всех. Т.е. в таблице равномерно растёт id объектов, но между соседними<br /> id  могут  быть  дырки, причём большие. И некоторые объекты показывать<br /> нельзя.<br /> <br /> Даётся  текстовая  строка.  В идеале нужно для этой строке максимально<br /> быстро  выбрать  из  таблицы случайные 3 разных объекта, доступные для<br /> всех.  Причём так, чтобы повторные выборы давали те же самые объекты и<br /> изменения таблицы минимально влияли на это.<br /> <br /> Т.е.  надо  из  перла обратиться к mysql-ю минимальное количество раз,<br /> сделав максимально быстрые запросы. Самое важное - скорость. Ей нельзя<br /> жертвовать. Можно жертвовать, но крайне нежелательно, привязкой строки<br /> к  объектам. Понятно, что таблица меняется и привязки строк к объектам<br /> будут меняться. Необходимо, чтобы эти изменения были минимальны. Можно<br /> жертвовать  количеством  выбираемых объектов, например выбирать иногда<br /> не  3, а 2 или 1, но не 0. Можно жертвовать степенью случайности между<br /> выбираемыми объектами, например, выбирая лишь один случайным способом,<br /> а  остальные  искать  поблизости от первого. Нельзя жертвовать охватом<br /> объектов таблицы, т.е. выбираться объекты должны среди всех не скрытых<br /> объектов.<br /> <span><font color="#888888"><br /> --<br /> С уважением,<br />  Михаил                          mailto:<a href="mailto:postmaster@softsearch.ru">postmaster@softsearch.ru</a><br /> <br /> --<br /> Moscow.pm mailing list<br /> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a><br /> </font></span></blockquote></div></div>,<p>-- <br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/">http://moscow.pm.org</a></p></blockquote><div> </div><div> </div><div>-- <br />Oleg Alistratov</div>