e chi lo sa se e' buona.

potresti per esempio fare anche cosi':
codice:
SELECT * FROM TABELLA
WHERE if(datediff(now(), data_e_ora) > '00:10:00', 1 , 0)
ORDER BY data_e_ora 
limit 300

poi subito a seguire:

update tabella
set data_e_ora = NOW()
WHERE if(datediff(now(), data_e_ora) > '00:10:00', 1 , 0)
ORDER BY data_e_ora
limit 300
se tanto mi da tanto dovresti aggiornare d'un botto tutti i record pescati in precedenza e mettere in tutti i record lo stesso valore di data_e_ora, poiche' now() legge una sola volta l'ora dal server e l'applica a tutto il range di record. In questo modo escluderesti via via i record inviati. Ma ... c'e' un ma. Puoi fare questa operazione solo ogni 10 minuti e quindi devi tenere il conto dell'ultimo invio fatto e attendere il timeout dei 10 minuti. Quindi poi devi scandire tutti i record .... e se li hai aggiornati puo' ripetere l'invio allo stesso record.

forse e' meglio alzare una flag nel record... tipo "data_e_ora" -" inviato 0/1". Quindi controllando sia il tempo trascorso e se il record e' stato inviato dovresti scandire tutta la tabella senza ripetizioni e senza tralasciare qualcuno. a fine invio resetti la flag e ricomincia la solfa.