After looking and testing a little bit in my company’s test environment - the Tests table holds the data for each Case for a specific Test Run. Nothing gets added to the table until a Test Run is created for a Project. So if you Create a second Test Run (R2) there will be a record in the Tests table for each Run )R1 and R2). At this time - (nothing has been assigned) there are no records in the Test_Changes because there are no changes to a case in a run.
Any changes to the Case in a Test Run is tracked in the Test_Changes table. From status changes, comments in the results area, assigning the case to anyone other than the original assignment is tracked in the Test_Changes table.
You numbers suggest that you have a lot of cases in Test Run(s) but few have had any changes to the cases after the initial creation of the Run.
TR does not allow deleting the records in the Test_Changes table for Auditing reasons.
The Tests table is the parent to the Test_Changes table. Test _Changes table should have the Test_Ids from the Tests table.