borges02 0 Denunciar post Postado Maio 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... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 24, 2009 entao você tem q tacar um index nessa coluna, senao nada feito alter table tabela ADD INDEX (campo) Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Maio 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... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 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) Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Maio 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... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 26, 2009 esquece isso de force index pq assim você deixa o banco com o otimizador descacetado Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Maio 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... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 26, 2009 Qual eh a consulta que você esta fazendo usando o order by? Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Maio 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... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 27, 2009 NOMEPES tem ou nao tem index proprio (apenas ele no index) Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Maio 27, 2009 Giesta, NOMEPES tem index proprio sim.. O nome do index desse campo é (Inomepes)... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 27, 2009 Kra, tem algo errado ai.... posta o Explain dessa consulta SEM USAR O FORCE, usando SOH o order by Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Maio 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 Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 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) Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Maio 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... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 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) Compartilhar este post Link para o post Compartilhar em outros sites