No olvides que en la informática un error casi siempre tiene más de una soluciones, pero aquí te enseñaremos la mejor y más eficiente.
Solución:
MySQL recomienda usar índices por una variedad de razones, incluida la eliminación de filas entre condiciones: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Esto hace que su columna de fecha y hora sea un excelente candidato para un índice si la va a usar en condiciones frecuentes en las consultas. Si tu única condición es BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
y no tiene otro índice en la condición, MySQL tendrá que hacer un exploración completa de la tabla en cada consulta. No estoy seguro de cuántas filas se generan en 30 días, pero siempre que sea menos de 1/3 del total de filas, será más eficiente usar un índice en la columna.
Su pregunta sobre la creación de una base de datos eficiente es muy amplia. Diría que solo se asegure de que esté normalizado y que todas las columnas apropiadas estén indexadas (es decir, las que se usan en las cláusulas join y where).
Aquí, las pruebas realizadas por el autor mostraron que la marca de tiempo entera de Unix es mejor que DateTime. Tenga en cuenta que usó MySql. Pero creo que no importa qué motor de base de datos use, comparar enteros es un poco más rápido que comparar fechas, por lo que el índice int es mejor que el índice DateTime. Tome T1 – tiempo de comparar 2 fechas, T2 – tiempo de comparar 2 enteros. La búsqueda en el campo indexado toma aproximadamente O (registro (filas)) porque el índice se basa en un árbol equilibrado; puede ser diferente para diferentes motores de base de datos, pero de todos modos Log (filas) es una estimación común. (si no usa una máscara de bits o un índice basado en r-tree). Entonces, la diferencia es (T2-T1) * Registro (filas): puede desempeñar un papel si realiza su consulta con frecuencia.