I've previously outlined my go-to for timeout mitigation here.
You can use the hidden _customObjectKey column in every DE and the % mod operator to split the processing of your query into multiple queries. For your query, you could split it into 3 queries like this:
You don't need ContentDocumentLink at all. Just traverse the relationship from ContentVersion.
SELECT ID, PathOnClient, VersionData, ContentDocument.OwnerId
WHERE ContentDocumentId = :ContentDocumentId
Note that you may want to add additional filters if, for example, you want the latest version of any given document.
This problem has been already answered here. Some additional context for understanding the SOQL query results from this ref is given below:
Query results are returned as nested objects. The primary or “driving”
object of the main SELECT statement in a SOQL query contains query
results of subqueries.
The SOQL query (& subquery) result is of type List<...
Inner query in SOQL works where you have Lookups or Master-Detail relationships.
In your query, you might not have any data in Item_Variations__r object with a lookup or masterdetail data of Item__c with Ids as itemIds.
You need to check Item_Variations__r record in your org, if they have any lookup or master detail data as your itemIds
This could be related to Contact Delete Process in your instance, where those 58k records might be in suppressed state in Contact Deletion, if those records are in suppression state then you won't get those contact keys on sendable Data Extension.