Sentry Issue: [POSTHOG-821](https://sentry.io/organizations/posthog/issues/3707400683/?referrer=github_integration)

Sentry is reporting that when listing session recordings loading persons is n+1

Looking at how the query works 

we 
* load person distinct ids for recordings in the list
* load the persons that have those distinct ids
* create a fict of distinct id to person
* for each of the recordings
    * look up the  person in the dict and pass them to a `PersonSerializer`
    * that looks up the person's distinct ids while choosing Person's `name`
    * (maybe only when there's no email) in order to determine the first distinct id for the person
    
 That final lookup of distinct ids is (**I think**) where the n plus 1 problem is. 
 
 For each person one at a time we go to the DB and get their distinct ids
 
 There's no foreign key from `Person` to `PersonDistinctId` so we can't utilise `select_related` here. 
 
 _maybe_ we can if we use a list serializer for Persons and then combine the two lists
 
 Some of the reports suggest 50% of the time generating the list is spent loading persons
posthog/api/test/test_session_recordings.py
chunked_session_id = "chunk_id"
        expected_num_requests = 3
        num_chunks = 60
        snapshots_per_chunk = 2
        with freeze_time("2020-09-13T12:26:40.000Z"):
            start_time = now()
            for index, s in enumerate(range(num_chunks)):
                self.create_chunked_snapshots(
                    snapshots_per_chunk,
                    "user",
                    chunked_session_id,
                    start_time + relativedelta(minutes=s),
                    window_id="1" if index % 2 == 0 else "2",
                )
            next_url = f"/api/projects/{self.team.id}/session_recordings/{chunked_session_id}/snapshots"
            for i in range(expected_num_requests):
                response = self.client.get(next_url)
                response_data = response.json()
                self.assertEqual(
                    len(response_data["result"]["snapshot_data_by_window_id"]["1"]),
                    snapshots_per_chunk * DEFAULT_RECORDING_CHUNK_LIMIT / 2,
                )
                self.assertEqual(
                    len(response_data["result"]["snapshot_data_by_window_id"]["2"]),
                    snapshots_per_chunk * DEFAULT_RECORDING_CHUNK_LIMIT / 2,
                )
                if i == expected_num_requests - 1: