Monitorar movimentos na BD

Boas pessoal,

Estou querendo fazer o seguinte :

Tenho uma tabela no banco de dados com o nome MOVIMENTOS. esta tabela tem todos os movimentos feitos pelo supermercado, de todos os caixas.

A tabela tem os seguintes campos : VALOR ; VENDEDOR ; PRODUTO ; CLIENTE(ID) ; DATA

Acontece que eu quero enviar um mail com a factura, para os clientes quando eles acabam de efectuar as suas compras. MAs nem todos os clientes subscreveram a este serviço. Ou seja eu tenho uma base de dados aonde constam os clientes que estao cadastrados para receber o mail.

A minha questão é : Como é que eu no meio de mihoes de movimentos vou selecionar apenas os cadastrados, garantindo, rapidez, e sem ter que ir de um a um a ver se este fez alguma compra ?

de momento eu faço da seguinte forma :

1 - tenho classe java que vai a base de dados ( De 1 em um minuto ) ver se ha alguma movimento feito por aqueles clientes. ( Isso rouba muito tempo ), pois tenho que muitos clientes q a medida que vai crescenddo isso piora.
2- Se houver algum movimento, eu tenho que ir verificar se aquele movimento ja foi enviado para o cliente.
3- Se nao foi enviado, ei tenho que enviar e registar os dados de envio noutra base de dados, para que o envio sobre aquele movimento nao se repitir.

Este sistema funciona bem quando estamos a falar de poucos clientes, mas a medida que o volume de aderencia cresce o meu sistema piora em termos de resposta.

Gostaria de encontrar uma outra saida para resolver este problema, pois acho que posso a minha metodologia pode nao ser a melhor.

Obrigado !

Na sua tabela movimentos poderia ter um campo status relacionando a adesão dos clientes ao sistema de emails, portanto quando o sistema for checar os movimentos e enviar emails ele apenas seleciona aqueles em que o status consta como “S”, é assim que fazemos aqui na empresa e funciona bem, só os que aderiram seram selecionados e posteriormente os emails enviados. è uma sugestão mas caso já tenha tentado isso sem sucesso, existem outras alternativas.

flw.