When tables goes larger and there are many records and rarely access to whole tables, just few records. Then, separate table's records into small piece will save the performance when process queries.
There are two approaches to achieve: Partitioning / shard table
Partitioning a table means you cut your table's records into smaller chunk base on value of field( or some fields) of table.
The result is : your table's records' amount reduced. Your query will process faster.
You still can access to every chunks to collect all data of table.
How to do :
The idea of shard a table is : store data in separated table with same structure. There is logic to identify which record will be located in which table.
The result is: your total records is broken down into several tables.
How to do: