The Permission Set Groups Considerations and Permission Set Group Status and Recalculation documents are helpful here.
Permission Set Groups are calculated into an aggregate form, thus improving performance. In other words, they are processed at configuration/deployment time, and then reused. Having many Permission Sets may have some impact, but this impact is limited because of Salesforce Features and Edition Allocations.
Specifically, orgs are limited to at most 1,500 global Permission Sets and 1,000 global Permission Set Groups, with each group having a maximum of 100 Permission Sets. Of those limits, your org is only allowed to create 1,000 Permission Sets and 800 Permission Set Groups; installed packages can also have Permission Sets and Permission Set Groups, and installation will fail if the global limits are exceeded.
Whenever we see limits like this, we know that there is some impact to performance, even though it may not be explicitly called out in any document. These limits are in place to keep Salesforce running at an appropriate level of service.
So, in one sense, you don't need to worry about a significant impact, because there are limits in place to keep the system reasonably responsive. On the other hand, this information should inform your design decisions about how granular your Permission Set and Permission Set Groups need to be.
You can't just create one Permission Set per User or per field, for example. As long as your Permission Sets and Permission Set Groups are reasonably designed to fit within the limits from above, you should find minimal impact to your organization's performance.
So, presuming you're a typical organization, and you have a reasonable number of features and groups, your general implementation that you've described sounds like a reasonable solution in most cases.
Best Answer
How
PermissionSet
relates toUser
is illustrated in this User, Sharing, and Permission Objects ERD.So for example, this SOQL will list all permission set assignments:
and this will list permission sets for a specific user:
You may wish to add further filtering.