exec("mysqldump -h Myhostname -uMYusername -pMypassword --opt MydatabaseName > Myfilename.sql") ;
This will create a downloadable file called Myfilename.sql
It is very fast.
A million rows isn't a lot of rows, frankly.
How do you design a database that is expected to get huge?
I expect all databases to get huge. It is their nature.
If you follow basic normalization design: that is, so much as is practical, eliminate REDUNDANT data, that is a good start.
Normalized databases might actually have more records, but will even so be significantly smaller in bytes, and much faster for basic SQL operations than their non-normal counterparts.
It is never too late to review and modify your db design for increased normalization.