Tak więc mam tabelę z ponad 80 000 rekordów, ten nazywa się system. Mam też inny stół o nazwie poniżej.Optymalizowanie mojego oświadczenia mysql! - RAND() ZBYT WOLNO
Potrzebuję mojego wyciągu, aby losowo wybrać rekordy z tabeli systemowej, gdzie ten identyfikator nie jest już wymieniony w poniższej tabeli pod bieżącym identyfikatorem użytkownika.
Więc tutaj jest to, co mam:
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
Teraz wotks doskonale, z wyjątkiem, że trwa o całą minutę, zanim będzie mógł nawet rozpocząć przetwarzanie zadania w parze z ewidencji to wybranych. W tym czasie scenariusz zazwyczaj nie działa, a nic się nie dzieje.
Czy ktoś może mi pokazać, jak przerobić to, więc ten sam pomysł został zrobiony, ale nie używa on kolejności według rand? Wydaje się to spowalniać całą masę.
Dzięki!
Jakie wskaźniki są dostępne w polach JOIN? To może być wielka szyjka butelki. – dnagirl
Nie jestem zbyt pewny, co masz na myśli ... – Brandon
@Brandon Wiem, że jest to trochę za późno, ale jeśli chcesz zrobić na wpół uproszczony sposób, możesz umieścić go w podkwerendie ... zobacz moją odpowiedź tutaj dla więcej szczegółów http://stackoverflow.com/questions/25361158/mysql-select-random-on-large-table-order-by-score/25364339?noredirect=1#comment39644652_25364339 –