Quatre millions de lignes, ce n'est pas énorme.
Une différence d'un octet entre les types de données datetime et timestamp est le dernier élément à prendre en compte pour choisir entre ces deux types de données. Revoir leurs spécifications .
Faire une partie d'horodatage de votre clé primaire est une très mauvaise idée. Pensez à revoir quelle clé primaire signifie dans une base de données SQL.
Mettez un index sur votre colonne d'horodatage. Obtenez un plan d'exécution et collez-le dans votre question. Déterminez votre médiane performances de la requête, et collez ça également dans votre question.
Le retour des lignes d'une journée à partir d'une table indexée de 4 millions de lignes sur mon ordinateur de bureau prend 2 ms. (Il renvoie environ 8000 lignes.)