ti manca un indice. Prova ad utilizzare EXPLAIN per analizzare la tua query, ti aiuterà molto.
La soluzione è semplice, eccola qui:http://sqlfiddle.com/#! 2/56deb/1/0
È necessario aggiungere un indice che includa le colonne utilizzate nell'istruzione where nell'ordine in cui vengono utilizzate:
KEY `night_of_2` (`night_of`,`student_id`,`check_class`)
Inoltre devi forzare l'uso dell'indice sul join, dato che stai unendo la tabella a se stessa:
JOIN checks checks2
INDICE FORZA ( notte_di_2 ) ATTIVO ( controlli1.notte_di =controlli2.notte_di )
(se c'è un modo migliore vorrei saperlo) :)
Saluti,