te falta un índice. Intenta usar EXPLAIN para analizar tu consulta, te ayudará mucho.
La solución es simple, aquí está:http://sqlfiddle.com/#! 2/56deb/1/0
Debe agregar un índice que incluya las columnas utilizadas en la instrucción where en el orden en que se utilizan:
KEY `night_of_2` (`night_of`,`student_id`,`check_class`)
También debe forzar el uso del índice en la unión, ya que está uniendo la tabla a sí misma:
JOIN checks checks2
FORCE INDEX ( night_of_2 ) ON ( checks1.night_of =checks2.night_of )
(si hay una mejor manera, me gustaría saberlo) :)
Saludos,