Итак, у меня есть таблица с более чем 80 000 записей, эта называется системой. У меня также есть следующая таблица, которая называется.Оптимизация моего оператора mysql! - RAND() TOO SLOW
Мне нужно мое заявление для случайного выбора записей из системной таблицы, где этот идентификатор еще не указан в следующей таблице под текущим идентификатором пользователя.
Так вот, что у меня есть:
SELECT system.id,
system.username,
system.password,
system.followed,
system.isvalid,
follows.userid,
follows.systemid
FROM system
LEFT JOIN follows ON system.id = follows.systemid
AND follows.userid = 2
WHERE system.followed = 0
AND system.isvalid = 1
AND follows.systemid IS NULL
ORDER BY RAND()
LIMIT 200
Теперь wotks отлично, за исключением того, что она занимает около целой минуты, прежде чем он может даже начать обрабатывать работу под руку с записями его выбрали. К этому времени сценарий обычно имеет время, и ничего не происходит.
Может ли кто-нибудь показать мне, как переделать это, так что эта же идея выполняется, но она не использует заказ rand? Кажется, это замедляет работу всей группы.
Спасибо!
Какие индексы у вас есть в ваших JOIN-полях? Это может быть большая бутылочная шея. – dnagirl
Я не слишком уверен, что вы имеете в виду ... – Brandon
@Brandon Я знаю, что это немного поздно для этого, но если вы хотите получить упрощенную форму, вы можете просто положить его в подзапрос. подробнее http://stackoverflow.com/questions/25361158/mysql-select-random-on-large-table-order-by-score/25364339?noredirect=1#comment39644652_25364339 –