In High Performance MySQL auf Seite 159 geht es darum, komplexe Abfragen in einfache aufzuteilen:
Konvertieren
SELECT * FROM tag
JOIN tag_post ON tag_post.tag_id=tag.id
JOIN post ON tag_post.post_id=post.id
WHERE tag.tag='mysql';
Zu
SELECT * FROM tag WHERE tag='mysql';
SELECT * FROM tag_post WHERE tag_id=1234;
SELECT * FROM post WHERE post.id in (123,456,567,9098,8904);
Und sozusagen den eigentlichen Beitritt zu Ihrer Bewerbung.
Meine Frage ist, ob dies immer noch eine so gute Idee ist, wenn die letzte Abfrage eine where-Klausel mit einigen tausend IDs enthält, mit denen sie übereinstimmen muss (die eigentliche Tabelle selbst enthält ungefähr 500.000 Einträge).
Was ich meine ist, wird es eine große Strafe für eine Anfrage wie geben
SELECT * FROM post WHERE post.id in (123,456,567, ... <a few thousand IDs here> ... ,9098,8904);
anstelle der obigen join-Anweisung? Wäre es hilfreich, diese Logik auf gespeicherte Prozeduren in der Datenbank zu verschieben (unter Berücksichtigung der Tatsache, wie schlecht gespeicherte Prozeduren in MySQL implementiert sind)?
postTabelle, ist dieser Beitrag wie in der Adresse? Wenn ja, könnten Sie eine Abfrage basierend auf der Postleitzahl oder nach Stadt ausführen
post.idvon dort die entsprechenden erhalten und die INKlausel in der letzten Abfrage verwenden? Oder ist es das, was du tust?
INKlausel mit ein paar tausend IDs ausführen müssen