Our usecase very different to what is normally the case. What we do is having 100.000 users answering questionnaires (React client side connected to Plone API extended with supplementary post and get services).
The resulting content (answers of questionnaires) is saved into JSON fields in MySQL and then importable by professionals evaluating the answers and taking decisions based on advanced presentations of the data in a Plone classic GUI. Here the presentations is not documents but advanced views and z3cform widgets and dexterity content types for documenting the decisions.
Related the userhandling what we have is personalid from external national login-systems. This we need map into plone user profile where userid is a UUID and the personalid is a property.
For having needed speed in lookup of the plone user (simple plone member of a group) we added index in mysql in front of the plone members so we know which UUID to use (instead of going though all 100.000 members looking for the property with the persinalid). The Plone users and the Mysql index in front of it is maintained by subscribers in the plone clasic where the 100.000 users doing questionnaires are created by the same professionals doing the evaluations and taking decisions.
With 100.000 members this approach brought us from from 2-3 seconds for a plone api call to near nothing.