If this is a serious issue and a project where you are prepared to invest significant resources to re-architect your approach, you might want to consider finding out about
CQRS - Command Query Responsibility Segregation.
The basic idea is that you have a separate data model for Read (Query) operations and for Write (Command) operations, so you can optimise each model specifically for queries or writes respectively. This obviously means you need some mechanism to maintain the Read model when your Write model is updated, and this can introduce complexity and - if you get it wrong - fragility to your application. But it also recognises the reality that your data model is trying to do many different things at once, and sometimes it is better to optimise for different things separately.
If you want to find out more about CQRS, Microsoft published a
free CQRS book and other
online resources about CQRS several years ago. The CQRS
pattern can be applied to any DB and using any programming language i.e. there is nothing Microsoft-specific about all this.
Just be prepared for some serious work if you decide to take this approach. Meanwhile, start by finding out where and why your database is being overwhelmed - it might be there is a much simpler solution!