|
MySQL.RU - Webboard
Вернуться
выборка случайной записи без повторений (Vishenko) 31/10/2007 - 15:26:49
Re: выборка случайной записи без повторений (EuGen) 08/11/2007 - 12:55:37
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 млн. записей. Бред.
Кто-нибудь сталкивался с подобной проблемой?
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
32409
|
|