Start here. This is the direct spoken answer to practice first.
Why this question matters
Read replicas can add capacity and isolate reporting workloads, but an asynchronously updated copy is not interchangeable with the primary for every operation. Routing needs to reflect how fresh each read must be.
I would first confirm that inefficient queries, missing indexes, or unnecessary reads are not the real bottleneck. Then I would route stale-tolerant work such as reports, catalog browsing, analytics, and background exports to a read replica. Writes continue on the primary. Reads that validate a write or must immediately show a user's change stay on the primary, or use a clear read-after-write strategy. The application needs separate connection roles so a critical query does not reach a lagging replica by accident.