MySQL: Suche nach Zeilen, nicht nehmen Sie Teil in einer Beziehung

Ich habe zwei Tabellen: 'Filme' und 'Benutzer'.
Es gibt eine n:m-Beziehung zwischen denen, die beschreiben, auf welche Filme, die ein Benutzer gesehen hat. Dies ist beschrieben mit einer Tabelle 'sehen'
Jetzt will ich herausfinden, für einen bestimmten Benutzer, alle Filme, die er nicht gesehen hat.
Meine aktuelle Lösung ist wie folgt:

SELECT *
FROM movies 
WHERE movies.id NOT IN (
     SELECT seen.movie_id 
     FROM seen 
     WHERE seen.user_id=123
)

Diese funktioniert aber scheinbar nicht sehr gut skalieren. Gibt es einen besseren Ansatz, um dieses?

  • > Dieser funktioniert aber scheinbar nicht sehr gut skalieren. Gibt es eine bessere Lösung für dieses? Haben Sie versucht, die <a href="dev.mysql.com/doc/refman/5.0/en/...> auf dieser Abfrage?
  • Wenn es nicht die Skalierung tja, dann sind deine Indizierung ist nicht wirksam. Was sind Ihre Indizes?
InformationsquelleAutor tliff | 2009-02-12
Schreibe einen Kommentar