MySQL zaleca używanie indeksów z różnych powodów, w tym eliminowania wierszy między warunkami:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
To sprawia, że kolumna datetime jest doskonałym kandydatem na indeks, jeśli zamierzasz często używać jej w warunkach w zapytaniach. Jeśli jedynym warunkiem jest BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
i nie masz żadnego innego indeksu w warunku, MySQL będzie musiał wykonać pełne skanowanie tabeli na każde zapytanie. Nie jestem pewien, ile wierszy zostanie wygenerowanych w ciągu 30 dni, ale dopóki jest to mniej niż około 1/3 łącznej liczby wierszy, bardziej efektywne będzie użycie indeksu w kolumnie.
Twoje pytanie dotyczące tworzenia wydajnej bazy danych jest bardzo szerokie. Powiedziałbym, aby upewnić się, że jest to znormalizowane i wszystkie odpowiednie kolumny są indeksowane (tj. te używane w klauzulach złączeń i wher).