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.

Reply via email to