Displaying filtered rows in RG from a table of 1.000.000 rows

Hello community,

How would you structure your DB if:

_10.000 rows were added to a table daily (contacts)

_Every 2000rows would be attached to a single ID. I would like to be able to filter these 2000rows instantly on a RG by selecting this ID and displaying by chunks of 50 with pagination.

Further details :
We have a table called “Contacts”. Every time one of our users makes a request, usually between 100/2000 rows to that Contacts table.
Let’s just say that we have 10 users adding 1000 rows daily to that “Contacts” table. Every request containing these 1000 rows contains a unique ID.

On the front side of things, we want to be able to display these rows by filtering by this unique ID

So, user 1 has made 5 requests, each with 1000 contacts and each with a unique ID. We want the user to choose one of his requests and display on a RG the 1000 rows from the “Contacts” table matching that request ID.

Important to note that we would like to display these 1000 rows by chunks of 50 and with a pagination system. Page 1 → 1-50 out of 1000 - Page 2 → 51-101