borges02 0 Report post Posted May 20, 2009 Boa tarde! Tenho uma tabela (PESSOAS) COM OS SEGUINTES CAMPOS: (CODIGOPES, NOMEPES, SRFPES, NASCPES, FONEPES, FAXPES, CELULARPES, DTCADPES, FOTOPES)... Os campos: (CODIGOPES, NOMEPES, SRFPES, FONEPES) estão todos indexados... Estão com os seguintes nomes: (Icodigopes, Inompes, Isrfpes, Ifone)... Estou tentando fazer um select ordenando pelo campo (NOMEPES) mas não estou conseguindo... Estou tentando fazer através do FORCE INDEX, mas não estou conseguindo... Estou tentando da seguinte forma: SELECT codigopes, nomepes, srfpes, fonepes FROM regiao force index(Inomepes)... Se eu fizer uma consulta com apenas dois campos, exemplo: codigopes e nomepes, a consulta funciona sem problemas, mas com 4 campos não estou conseguindo... Se eu colocar o ORDER BY funciona mas o resultado da consulta é muito demorado, pois essa tabela tem +/- 200.000 registros... Alguem sabe informar se tem como ordenar os registros através da indexação da coluna? Desde já, agradeço pela ajuda e atenção de todos... Muito Obrigado... Share this post Link to post Share on other sites
giesta 29 Report post Posted May 24, 2009 entao você tem q tacar um index nessa coluna, senao nada feito alter table tabela ADD INDEX (campo) Share this post Link to post Share on other sites
borges02 0 Report post Posted May 25, 2009 beleza Giesta? Então, as colunas que estou usando para realizar a consulta, estão todas indexadas.. Estão com os seguintes nomes: (Icodigopes, Inomepes, Isrfpes, Ifone)... O meu problema é que não estou conseguindo ordenar os registros pelo nome... Estou tentando fazer um select ordenando pelo campo (NOMEPES) mas não estou conseguindo... Estou tentando fazer através do FORCE INDEX, mas não estou conseguindo... Estou tentando da seguinte forma: SELECT codigopes, nomepes, srfpes, fonepes FROM regiao force index(Inomepes)... Se eu fizer uma consulta com apenas duas colunas, exemplo: codigopes e nomepes, a consulta funciona sem problemas, mas com 4 colunas não estou conseguindo... Se eu colocar o ORDER BY funciona mas o resultado da consulta é muito demorado, pois essa tabela tem +/- 200.000 registros... Eu gostaria de saber se tem como ordenar os registros pela coluna(NOMEPES) através da indexação sem usar o order by? com o order by da certo, o problema é que na hora de carregar os registros no DataGridView fica muito demorado, o processo é lento... Share this post Link to post Share on other sites
giesta 29 Report post Posted May 25, 2009 beleza, jah tem index, mas o index eh composto, como você quer ordernar por uma campo soh você cria um NOVO index soh com aquele campo tambem seria inteligente aumentar o buffer de order by no my.conf (se for possivel) Share this post Link to post Share on other sites
borges02 0 Report post Posted May 26, 2009 beleza Giesta? Então, estou usando index simples... Cada campo que uso na consulta possui o seu index... Para o campo (NOMEPES) que estou querendo ordenar, o nome do seu index é (Inomepes)... Estou tentando da seguinte forma: SELECT codigopes, nomepes, srfpes, fonepes FROM regiao force index(Inomepes)... Se eu fizer uma consulta com apenas dois campos, exemplo: codigopes e nomepes, a consulta funciona sem problemas, mas com 4 campos não estou conseguindo... Se eu colocar o ORDER BY funciona mas o resultado da consulta é muito demorado, pois essa tabela tem +/- 200.000 registros... Share this post Link to post Share on other sites
giesta 29 Report post Posted May 26, 2009 esquece isso de force index pq assim você deixa o banco com o otimizador descacetado Share this post Link to post Share on other sites
borges02 0 Report post Posted May 26, 2009 O pior é que se eu não usar esse force index() e tentar ordenar por (NOMEPES) através do order by, a consulta fica muito lenta... Share this post Link to post Share on other sites
giesta 29 Report post Posted May 26, 2009 Qual eh a consulta que você esta fazendo usando o order by? Share this post Link to post Share on other sites
borges02 0 Report post Posted May 27, 2009 Se eu fizer dessa forma: SELECT CODIGOPES, NOMEPES, SRFPES, FONEPES FROM REGIAO ORDER BY NOMEPES,,,,,,, o resultado da consulta é muito lento... Eu gostaria de saber se tem como eu ordenar pelo campo(NOMEPES) de outra forma? onde o resultado seja mais preciso... Por isso estou tentando pela indexação... Queria ver contigo se tem como ordenar os registros pelo campo(NOMEPES) através da indexação, ou uma forma que o resultado seja mais rápido... Share this post Link to post Share on other sites
giesta 29 Report post Posted May 27, 2009 NOMEPES tem ou nao tem index proprio (apenas ele no index) Share this post Link to post Share on other sites
borges02 0 Report post Posted May 27, 2009 Giesta, NOMEPES tem index proprio sim.. O nome do index desse campo é (Inomepes)... Share this post Link to post Share on other sites
giesta 29 Report post Posted May 27, 2009 Kra, tem algo errado ai.... posta o Explain dessa consulta SEM USAR O FORCE, usando SOH o order by Share this post Link to post Share on other sites
borges02 0 Report post Posted May 28, 2009 Giesta, A consulta é a seguinte: EXPLAIN SELECT CODIGOPES, NOMEPES, SRFPES, FONEPES FROM REGIAO ORDER BY NOMEPES..... O resultado é o seguinte: ID = 1 SELECT_TYPE = simple TABLE = regiao TYPE = all POSSIBLE_KEYS = null KEYS = null KEYS_LEN = null REF = null ROWS = 201166 EXTRA = using filesort Share this post Link to post Share on other sites
giesta 29 Report post Posted May 28, 2009 Pra começar ele nao tah usando o index pra ordenar e alem disso sua informaçao eh grande d+ para a memoria RAM tenta rodar a consulta assim SELECT CODIGOPES, NOMEPES, SRFPES, FONEPES FROM REGIAO ORDER BY left(NOMEPES,5) Share this post Link to post Share on other sites
borges02 0 Report post Posted May 28, 2009 Testei dessa forma que você sugeriu e o desempenho melhorou um pouco com relação ao ORDER BY normal sem left, mas continua lento... Share this post Link to post Share on other sites
giesta 29 Report post Posted May 29, 2009 bom, 200mil linhas nao eh algo q se ordena todo dia.... e pra você soh tem uma solucao, ir aumentando seu sort_buffer_size ateh q ele talvez passe a usar o index, pode ser mudado por consulta ou dentro do my.conf ou por linha de comando na hora de subir o banco no caso da consulta, eh a abaixo set sort_buffer_size = 100*POWER(10,6) Share this post Link to post Share on other sites