Werfe einen Blick in das PostgrSQL-Log. In dem werden auch long-running-Queries protokolliert. Und was sehe ich da? #Mastodon macht:
SELECT “tags”.* FROM “tags” WHERE “tags”.”id” IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, […] $5272, $5273, $5274) AND “tags”.”id” > $5275 ORDER BY “tags”.”id” ASC LIMIT $5276
Heiliger Bimbam, 5276 Bind-Parameter. Wer baut sowas … – sieht nach irgendeinem gammeligem ORM aus.
Ja, natürlich sind Bind-Parameter richtig und korrekt. Aber doch nicht über 5000!
Die kommen doch garantiert auch aus der DB. SQL kann sowas wie:
SELECT * FROM tags WHERE id IN (SELET tag_id FROM <wasauchimmer> WHERE <bedingung>) AND id > $1 ORDER BY id ASC LIMIT $2;
Allerdings riecht “id > $x” irgendwie auch nach einem schlechten Datenbank-Modell.