El error es de diseño no de programación, a menos que sea una tabla muy pequeña casi nunca se debe hacer un "select * from nombre_tabla" sin restringir ni filtrar nada ya que te puede pasar lo que te está sucediendo. A Casimiro le pasaría exactamente lo mismo si pretendiera cargar los 3 millones de registros de su tabla.
Lo que puedes hacer es restringir el num de registros que vas a traer en cada consulta ya sea mediante filtros que pidas al usuario (de tal a tal fecha, de tal a tal numero) o bien paginando mediante un LIMIT
ejemplo, pensando en que vamos a paginar de 50 en 50 registros:
Código SQL
[-]
select * from mitabla LIMIT 50
te trae los primeros 50 registros
Código SQL
[-]
select * from mitabla LIMIT 50 OFFSET 50
te trae los siguientes 50 registros y así sucesivamente siempre vamos cambiando el valor de offset de 50 en 50.
Ojala pusieras el query que estas utilizando