BGanger is correct, this is by design actually so that completed runs are archived and can be used for auditing purposes. Completed runs are also immutable which means that changes to the referenced test cases or test suite do not propagate to the completed/closed test run (e.g. if you delete a test case in the test suite of the run, the related test and its test results are still available for a completed test run).
This means there is potential for the database to grow rapidly. While I can’t provide specific names, there are teams operating comfortably at the scale of tens of thousand of test cases and millions of records.
We have a general performance optimization guide on our website here you may find help in improving your current setup :
It is also a good idea to ensuring that your database is hosted on the best IOPS performing storage available. For example using SSD storage will provide far superior performance over spinning disks.