Klar, wenn sich das SELECT so weit optimieren lässt, das die Daten schnell zusammengesucht sind, dann wäre es schöner. (vielleicht kann man dann sogar die Kopie/Cache lostwerden und direkt)
* Join statt SubSelect
* mit passenden Indize auf allen wichtigen Spalten
* eventuell vorhandene und optimiertere Fertiglösungen nutzen
* ...
Wir hatten sowas früher als Cache in einem DataSnap-Server.
Eine Querykomponente holt die Daten, wenn fertig wurde das schnell in eine MemoryTable kopiert (bzw. dieses Query mit dem Ausgabequery getauscht) und in der zwischenzeit konnten die Clients multithreaded auf die fertige Kopie zugreifen.
Und inzwischen wurde es auf Materialized-Views umgestellt (Postgres),
also auf vorberechnete Views, wo alle paar Minuten unser Server nur noch den Refresh anstößt.
Ist in etwa sowas wie eine virtuelle Tabelle, welche regelmäßig über einen View bzw. StoredProc gefüllt/aktualisiert wird.