Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
выборка случайной записи без повторений (Vishenko) 31/10/2007 - 15:26:49
      Re: выборка случайной записи без повторений (EuGen) 08/11/2007 - 12:55:37

> Original message text:
> From: Vishenko - 31/10/2007 - 15:26:49
> Subject:выборка случайной записи без повторений
> -----------------
> Есть база вопросов около 30 тыс. записей.
> Пользователей около 1000.
> Как сделать эффективную выборку, чтобы единожды выбранные пользователем записи не повторялись?
> Для выборки использую
>
> select * from question order by rand() limit 1
>
> Работает шустро.
> создал таблицу
>
> create table lookup(user_id INT, question_id INT)
>
> для именной регистрации уже заданных вопросов.
> Случайная выборка преобразовалась в
>
> select * from question where id NOT IN (select question_id from
> lookup where user_id=user) order by rand() limit 1
>
> работает медленно.
> Разбил задачу на две
> сначала выбираю только заданные вопросы
>
> select question_id from lookup where user_id=user
>
> и перлом создаю строку типа $lookup="12,45,6000...3234,10007"
> подставляю эту строку в запрос на случайную выборку
>
> select * from question where id NOT IN ($lookup) order by rand() limit 1
>
> Заработало быстрее, но всё-равно, при 5000 записей на посетителя начинает тормозить.
>
> Создавать для каждого пользователя таблицу зАданных (или незаданных) вопросов не хочется. 1000*300000 - около 30 млн. записей. Бред.
>
> Кто-нибудь сталкивался с подобной проблемой?
>


From: EuGen - 08/11/2007 - 12:55:37
Subject:выборка случайной записи без повторений
-----------------
Можно пробовать:
select * from question order by rand() limit QUESTION_LIMIT
где QUESTION_LIMIT - число вопросов, которые Вам нужно получить. Но на больших таблицах работает медленно. Скажем, при базе вопросов порядка 100000 выборка уже 100 строк таким образом будет заметно тормозить (все потому, что при выборке mysql для RAND() формирует псевдостолбец и делает по нему full scan)


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32409



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |