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)?
post
Tabelle, ist dieser Beitrag wie in der Adresse? Wenn ja, könnten Sie eine Abfrage basierend auf der Postleitzahl oder nach Stadt ausführen
post.id
von dort die entsprechenden erhalten und die IN
Klausel in der letzten Abfrage verwenden? Oder ist es das, was du tust?
IN
Klausel mit ein paar tausend IDs ausführen müssen