Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

igorctb

Query lenta quando aplicado Order by

Recommended Posts

Estou com uma tabela com aproximadamente 200 mil registros

 

essa query abaixo retorna cerca de 140 mil registros e demora em torno de 14 segundos para rodar, quando eu removo o order by ela demora 1 segundo. Tem algum jeito de ordenar os registro que não demore tanto ?

 

SELECT idac, dat, dai, co2, cha, eme, arq, id, integra, tri, pagnum, islcase, ispdf, webtip, coie, num, rel, liv, exe, mciv, mtraba, mptraba, mpenal, mtrib, mprev, numidac, psq, alf, (MATCH (cha) AGAINST('emitente cheque sem fundo nao cabe dano moral ' in boolean mode)* 1.6) + (MATCH (eme) AGAINST('emitente cheque sem fundo nao cabe dano moral ' in boolean mode)* 0.5) as score FROM jur WHERE MATCH (idx) AGAINST('emitente cheque sem fundo nao cabe dano moral ' in boolean mode) and exclui=0 ORDER by score DESC LIMIT 0, 100

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 Demora 1 segundo para trazer onprimeiro fecth, veja o tempo para trazer tudo sem a ordenação.

 

2 Tentou trocar o "match.against" por um "like" ? Creio ser mais leve

 

3 Gerou o Plano de Execução da query ?

 

4 Pq as colunas do "score" não estão no WHERE ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sem os where ela fica rápida? se ficar você da o order by ali e faz um select no select c/ o where, pode parecer besteira, mas essas tabelas maiores tem que fazer cada nóia para que fiquem rápidas....

 

eu faria assim

CREATE TABLE tabela_temporaria AS SELECT idac, dat, dai, co2, cha, eme, arq, id, integra, tri, pagnum, islcase, ispdf, webtip, coie, num, rel, liv, exe, mciv, mtraba, mptraba, mpenal, mtrib, mprev, numidac, psq, alf, (MATCH (cha) AGAINST('emitente cheque sem fundo nao cabe dano moral ' in boolean mode)* 1.6) +  (MATCH (eme) AGAINST('emitente cheque sem fundo nao cabe dano moral ' in boolean mode)* 0.5) as score FROM jur WHERE MATCH (idx) AGAINST('emitente cheque sem fundo nao cabe dano moral ' in boolean mode)   and exclui=0

depois o order by

SELECT * FROM tabela_temporaria ORDER by score DESC LIMIT 0, 100

cara pode parecer besteira mas testa, vai que ajuda, eu ja me **** mto c/ tabelas enormes e geralmente crio umas compiladas e faço os wheres nelas, se bem que nem tem join ali, talvez isso nem ajude mto, mas vai que vai q

 

o unico problema é que pelo q eu entendi mesmo c/ o where ele retorna 140k de registros, entao nao sei como o order by vai se comportar

 

o que deve ser é que no order by ele deve estar recalculando aqueles matchs ali

 

EDIT: gramática

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.