Luiz Fernando Posted June 28, 2015 Report Share Posted June 28, 2015 Colegas veja o select abaixo cSql="SELECT pe.produto,sum(pe.qtd),sum(pe.qtd*pe.valor),gr.codigo,gr.nome" cSql+=",count(*),pr.descricao,pe.vendedor,vn.nome" cSql+=" FROM pedido as pe, produto as pr, grupo as gr, vendedor as vn" cSql+=" WHERE pe.data >= "+Any2Sql(cGet[1]) cSql+=" AND pe.data <= "+Any2Sql(cGet[2]) cSql+=" AND pe.tipo='1'" cSql+=" AND pe.vendedor = vn.codigo" cSql+=" AND pe.produto = pr.codigo AND pr.grupo = gr.codigo" if cGet[3]<>'999' cSql+=" AND pe.vendedor ='"+cGet[3]+"'" endif if nOperacao=1 cSql+=" AND pe.operacao<>2" else cSql+=" AND pe.operacao<>1" endif cSql+=" GROUP BY pe.vendedor,pr.codigo" se a variavel cGet[3] for igual '999' este select é exibido em 15 segundos, agora caso contrario leva 14 minutos, achei estranho um filtro a mais levar dando tempo a mais desta forma, alguém teria alguma dica. Obrigado Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted June 28, 2015 Report Share Posted June 28, 2015 Luiz eu faria assim: //-> antes do select local cOper := space(1)if nOperacao=1 cOper := "1"else cOper := "2"endifcSql := "SELECT pe.produto," +; "SUM(pe.qtd)," +; "SUM(pe.qtd*pe.valor) AS preco," +; "gr.codigo," +; "gr.nome," +; "COUNT(*) AS algo," +; "pr.descricao," +; "pe.vendedor," +; "vn.nome" +; " FROM pedido pe" +; " LEFT JOIN produto pr ON pe.produto = pr.codigo" +; " LEFT JOIN grupo gr ON pr.grupo = gr.codigo" +; " LEFT JOIN vendedor vn ON pe.vendedor = vn.codigo" +; " WHERE pe.data BETWEEN "+Any2Sql(cGet[1])+" AND '"+Any2Sql(cGet[2])+"' " +; " AND pe.tipo = '1' +; " AND pe.operacao = '"+cOper+"' " if cGet[3] <> '999' cSql += " AND pe.vendedor ='"+cGet[3]+"' " endif cSql += " GROUP BY pe.vendedor,pr.codigo ;" O que seria essa linha "COUNT(*) AS algo," o algo foi eu quem colocou... Usei LEFT, mas pode ser INNER não sei como afetaria sua consulta ai.. Espero ajudar. Sds, Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted June 28, 2015 Report Share Posted June 28, 2015 Agora eu tenho uma pergunta esse Any2Sql faz o que mesmo com o valor digitado no get, ele trata que tipos de campos, onde posso achar algo sobre essa função, já procurei e nunca achei. Eu mesmo trato meu campos. Grato, Geraldo Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 29, 2015 Author Report Share Posted June 29, 2015 Vlw Geraldo não sabia que dava certo fazer o LEFT JOIN na tabela de grupo, pois não tinha este campo na minha tabela de pedido que é a tabela principal do FROM, agora mesmo com o filtro do vendedor ficou nos 15 segundos. Obs: sobre o Any2Sql faz parte da SQLLIB Obrigado Quote Link to comment Share on other sites More sharing options...
miragerr Posted June 29, 2015 Report Share Posted June 29, 2015 Ola amigos O Any2Sql é igual ao cValToChar... só que com peculiaridades para o SQL, como a data que ele converte para YYYY-MM-DD, que é padão no MySql. Espero ter ajudado. Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted June 29, 2015 Report Share Posted June 29, 2015 Ajudou sim Miragerr, obrigado. Luiz funciona sim faço cada SQL que até eu duvido rss....os mais pesados são para Sql Server, mas é a mesma coisa. O sistema não é meu faço apenas consultas, então tenho que me virar com o que tem lá e acabo aprendendo um pouco. Sds, Luiz Fernando 1 Quote Link to comment Share on other sites More sharing options...
evandro Posted June 30, 2015 Report Share Posted June 30, 2015 Olá, A tabela PEDIDOS tem um índice pelo campo VENDEDOR? Confira se os campos de relacionamento e os que fazem parte do where estão indexados. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 30, 2015 Author Report Share Posted June 30, 2015 Olá, A tabela PEDIDOS tem um índice pelo campo VENDEDOR? Confira se os campos de relacionamento e os que fazem parte do where estão indexados. Ola Evandro, o campo vendedor não tem indice, ate iria criar, mais depois da reposta do Geraldo como ficou bom deixei de lado, agora aproveitando já li em algum lugar se eu tiver uma tabela com muitos registros e tiver muitos campos com indice isso pode causa uma certa perda de perfoma nos INSERT e UPDATE por isto eu tomo o cuidado de criar indice somente em alguns campos, sera que isto confere mesmo. Obrigado Quote Link to comment Share on other sites More sharing options...
evandro Posted June 30, 2015 Report Share Posted June 30, 2015 Olá, Não é para colocar índice a torto e a direito, mas não tenho esta informação. O que é importante, e faz uma diferença descomunal, é indexar os campos dos joins e dos wheres. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 30, 2015 Author Report Share Posted June 30, 2015 Olá, Não é para colocar índice a torto e a direito, mas não tenho esta informação. O que é importante, e faz uma diferença descomunal, é indexar os campos dos joins e dos wheres. Vlw Evandro obrigado pela resposta, sei sim que faz a diferença, aqui os principais campo das tabela com maior numero de registro já estão todos com indice. Abraços Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.