It looks like we need a simple index on the report table, probably on the user_id column, to speed up two operations that have become slow with the huge size of the report table:
- fetching the results of a single report
- fetching the list of all reports for a user
Also, we could put in place a regular cleanup of the database that deletes reports older than 30 days (these are not displayed in the UI anyway). This by itself would not solve the problem as within 30 days EEVS generates a huge amount of report records.
Yet another improvement could be a way for the report to clean up records after itself (for example, it could delete its ValidateReport, AggregateReport, MultiProjectMetricReport, and MetricReport records if those don't store any intermediary results - which right now they don't).