I found something weird. This is my query now -------------------------- (SELECT m.codmensagem, m.codprioridade, m.codusuario, m.codmensagemoriginal, m.codmensagempai, m.assunto, m.dataenvio, m.horaenvio, m.datalimite, m.horalimite, m.anexo, m.tipo, u.nome, up.nome as nomepara, mp.codrespondida, mp.codmensagempara, mp.codusuario as codusuariopara, mp.situacao FROM mensagenspara mp, mensagens m, usuarios u, usuarios up
WHERE m.ativo=1 AND mp.codmensagem = m.codmensagem AND u.codusuario = m.codusuario AND up.codusuario = mp.codusuario AND mp.codpasta = 2 AND mp.situacao != 4 AND mp.codusuario = <USER_CODE>) UNION (SELECT m.codmensagem, m.codprioridade, m.codusuario, m.codmensagemoriginal, m.codmensagempai, m.assunto, m.dataenvio, m.horaenvio, m.datalimite, m.horalimite, m.anexo, m.tipo, u.nome, up.nome as nomepara, mp.codrespondida, mp.codmensagempara, mp.codusuario as codusuariopara, mp.situacao FROM mensagens m,mensagenspara mp, usuarios u, usuarios up WHERE m.ativo=1 AND mp.codmensagem = m.codmensagem AND u.codusuario = m.codusuario AND up.codusuario = mp.codusuario AND m.codpasta = 2 AND m.situacao = 1 AND m.codusuario = <USER_CODE> GROUP BY m.codmensagem ) ORDER BY dataenvio DESC, horaenvio DESC, codmensagem DESC LIMIT 0,40 --------------------------- But depending on what USER_CODE I use, it found or not and index. For example, if I use my code, 916: id: 2 select_type: UNION table: mp type: ref possible_keys: usuario_mensagem_situacao key: usuario_mensagem_situacao key_len: 10 ref: teste2.up.codusuario,teste2.m.codmensagem rows: 1 Extra: Using where But if I use any other code: id: 2 select_type: UNION table: mp type: ALL possible_keys: usuario_mensagem_situacao key: key_len: ref: rows: 197980 Extra: Someone could explain this behavior and how I can fix? Thanks in advance.