igorctb 0 Denunciar post Postado Junho 19, 2014 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
Motta 645 Denunciar post Postado Junho 19, 2014 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
paulojuchem 20 Denunciar post Postado Julho 1, 2014 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