Hi,

I've done some indexes in my tables and I solved my problem.
But I still confused with indexes. I created one multiple index with the
main 4 columns for mensagenspara's table. But it doesn't work. So, I created
one index with 3 columns and one for each column, wich give me 4 indexes,
and later, I created another one. I'm with 5 indexes in the end. Now my
response time comes to 0.72 with users that have more than 7,000 messages
sent (in mensagens table) and less than 0.1 with users that have around
1,000 messages sent.

And in the end, the UNION works fine for me.
I don't know how indexes work at all. Could someone explain?
Thanks you all for your help.

--------------

The query:

 explain
(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 , usuarios u, usuarios up, mensagens m

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 = 545

GROUP BY m.codmensagem
)

UNION ALL

(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 , usuarios u, usuarios up, mensagens m

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 = 545)

ORDER by dataenvio asc, horaenvio asc
LIMIT 0,40


explain for this query:

id: 1
select_type: PRIMARY
table: u
type: const
possible_keys: PRIMARY,codusuario
key: PRIMARY
key_len: 4
ref: const
rows: 1
Extra: Using temporary; Using filesort
-------------------------------
id: 1
select_type: PRIMARY
table: m
type: ref
possible_keys: PRIMARY,indice01,indice02,indice03,usuario_pasta_situacao
key: usuario_pasta_situacao
key_len: 15
ref: const,const,const
rows: 4028
Extra: Using where
-------------------------------
id: 1
select_type: PRIMARY
table: mp
type: ref
possible_keys: indice01,usuario_pasta_situacao,mensagem_idx
key: mensagem_idx
key_len: 5
ref: teste2.m.codmensagem
rows: 3
Extra: Using where
-------------------------------
id: 1
select_type: PRIMARY
table: up
type: eq_ref
possible_keys: PRIMARY,codusuario
key: PRIMARY
key_len: 4
ref: teste2.mp.codusuario
rows: 1
Extra:
-------------------------------
id: 2
select_type: UNION
table: up
type: const
possible_keys: PRIMARY,codusuario
key: PRIMARY
key_len: 4
ref: const
rows: 1
Extra:
-------------------------------
id: 2
select_type: UNION
table: mp
type: range
possible_keys:
indice01,indice02,indice03,usuario_pasta_situacao,mensagem_idx
key: usuario_pasta_situacao
key_len: 15
ref:
rows: 2
Extra: Using where
-------------------------------
id: 2
select_type: UNION
table: m
type: eq_ref
possible_keys: PRIMARY,indice01,usuario_pasta_situacao
key: PRIMARY
key_len: 4
ref: teste2.mp.codmensagem
rows: 1
Extra: Using where
-------------------------------
id: 2
select_type: UNION
table: u
type: eq_ref
possible_keys: PRIMARY,codusuario
key: PRIMARY
key_len: 4
ref: teste2.m.codusuario
rows: 1
Extra:
-------------------------------
id:
select_type: UNION RESULT
table:
type: ALL
possible_keys:
key:
key_len:
ref:
rows:
Extra: Using filesort
-------------------------------

Indexes for "mensagens":
KEY `indice01` (`codusuario`),
KEY `indice02` (`situacao`),
KEY `usuario_pasta_situacao` (`codusuario`,`codpasta`,`situacao`)

Indexes for "mensagenspara":
KEY `indice01` (`codusuario`),
KEY `indice02` (`situacao`),
KEY `indice03` (`codpasta`),
KEY `usuario_pasta_situacao` (`codusuario`,`codpasta`,`situacao`),
KEY `mensagem_idx` (`codmensagem`)

Reply via email to