Ir para conteúdo

ndias

Members
  • Total de itens

    128
  • Registro em

  • Última visita

Reputação

2 Comum

Sobre ndias

Últimos Visitantes

449 visualizações
  1. @Motta obrigado pela ajuda! A solução que encontrei foi setar duas vezes a query usando as mesmas cláusulas where Uma pra me trazer só o resultado do count e outra pro relatório com index e o limit (0,10) Porém, tive que excluir o group by do count pra ficar performático (só ñ sei se o resultado será o mesmo...rs). Valeu! Abraços,
  2. @Motta, o limite é pra paginar, justamente pra diminuir o tempo de execução do relatório e carregar mais rápido a página
  3. Oi@Motta tudo bem? Obrigado por responder! O campo data de nascimento é varchar(20). Por isso a necessidade dos REPLACE e calcular a idade desse jeito. Mas o problema agora ñ é esse! Consegui reduzir de 40s para 5s a consulta. Mas eu preciso contar os registros da consulta sem o LIMIT 0,10. no PHP eu posso usar o rowCount() antes do LIMIT, mas depois vou ter que rodar a query de novo, e isso sobrecarrega o tempo de execução. tá sendo um desafio. Pra você ter uma ideia, isso é um sistema de busca em AJAX que roda em 60s 10 scripts simultaneamente para carregar tudo. Mas tá f***! Sei que faz parte alguns relatórios demorarem, mas tô tentando performatizar o máximo. Mesmo eu criando índices, não sei porque o explain retorna filesort. Porém, consegui melhorar bastante! me dá uma sugestão de como contar os registros da consulta sem o LIMIT 0,10, por favor. Obrigado,
  4. Valeu @Motta Me ajuda em outra coisa, se puder, por favor. Tenho o seguinte select: SELECT cv.IdCV, cv.Nome, cv.CPF, cv.DtNascimento, cv.Curso, cv.Escolaridade, cv.Dia, cv.Ano, cv.TipoDeficiencia, cv.Resumo, cv.Informacoes, cv.ExperienciaProfissional, cv.Bairro, cv.Cidade, cv.Estado, IFNULL(Date(cv.DataUpdate),Date(cv.DataCadastro)) as UltimaAtualizacao FROM tblCadastro_Curriculo_Incompleto cv use index (busca_cv) WHERE cv.Ativo = 'S' and cv.Excluido = 'N' and ((YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) >= 16 or (datediff(YEAR(ifnull(Date(cv.DataUpdate),Date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) >= 16) and (YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) <= 97 or (datediff(YEAR(ifnull(Date(cv.DataUpdate),Date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) <= 97)) group by cv.DataUpdate,cv.DataCadastro,cv.IdCV,cv.Nome,cv.CPF,cv.DtNascimento,cv.Curso,cv.Escolaridade,cv.Dia,cv.Ano,cv.TipoDeficiencia,Resumo,Informacoes,cv.ExperienciaProfissional,cv.Bairro,cv.Cidade,cv.Estado LIMIT 0,10 quero de maneira performática, contar quantos registros tem sem o LIMIT 0,10
  5. Alguém pode me ajudar? Tenho a seguinte query: select cc.CampoConhecimento, COUNT(distinct(cc.idCv)) as Total, count(CASE WHEN cc.NivelConhecimento = 1 OR cc.NivelConhecimento = 0 OR cc.NivelConhecimento IS NULL THEN 'Basico' ELSE NULL END) as Basico, count(CASE WHEN cc.NivelConhecimento = 2 THEN 'Intermediario' ELSE NULL END) as Intermediario, count(CASE WHEN cc.NivelConhecimento = 3 THEN 'Avancado' ELSE NULL END) as Avancado from tblCurriculoConhecimento cc inner join tblCadastro_Curriculo_Incompleto cv on cv.IdCV = cc.idCV where cv.Ativo = 'S' and (cv.Sexo = 'M' or cv.Sexo = 'F') and cv.Excluido = 'N' and ((YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) >= 16 or (datediff(YEAR(ifnull(date(cv.DataUpdate),date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) >= 16) and (YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) <= 97 or (datediff(YEAR(ifnull(date(cv.DataUpdate),date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) <= 97)) group by cc.CampoConhecimento order by cc.CampoConhecimento asc; Que em 40s me retorna isso: Access 53593 42482 8937 2174 ASP 13271 12963 241 67 AutoCad 20740 15637 3335 1768 C 15261 13903 1093 265 CMais 15666 14284 1118 264 Cobol 12826 12670 109 47 CorelDraw 22418 18069 3192 1157 CSS 33043 27538 4350 1155 Dbase 13049 12839 167 43 Delphi 13226 12901 248 77 Dreamweaver 16216 14578 1223 415 Excel 110420 50002 43771 16647 Flash 17492 15713 1370 409 HTML 50819 38377 9210 3232 Java 15566 14204 1092 270 JavaScript 37677 31640 4869 1168 Linux 19782 17101 2141 540 Macintosh 15491 14245 854 392 MSSQLServer 32612 28300 3625 687 MySQL 32499 27919 3786 794 Net 13734 13095 472 167 Oracle 13711 13240 400 71 Outlook 31534 17714 8555 5265 Photoshop 25695 19547 4478 1670 PHP 14189 13439 594 156 PowerPoint 108758 46837 41646 20277 Sharepoint 12803 12657 102 44 Windows 34045 16383 10059 7603 Word 112999 39167 45279 28554 Para esse resultado eu criei os índices: ALTER TABLE tblCurriculoConhecimento ADD INDEX (idCV,CampoConhecimento,NivelConhecimento); ALTER TABLE tblCurriculoConhecimento ADD INDEX (CampoConhecimento,idCV); ALTER TABLE tblCadastro_Curriculo_Incompleto ADD INDEX (Sexo,Ativo,Excluido,DtNascimento,DataUpdate,DataCadastro,Estado,Cidade,TipoDeficiencia,Instituicao,Curso,Dia,Ano,Nome,CPF,Email); O cv.IdCV é um PRMARY KEY. Eu adicionei no INDEX campos a mais em relação a esta consulta, porque em certos momentos eles serão usados. O EXPLAIN tá me retornando isso: 1 SIMPLE cv index PRIMARY Sexo 1335 null 203349 Using where; Using index; Using temporary; Using filesort 1 SIMPLE cc ref idCV idCV 5 cv.IdCV 4 Using where; Using index Eu queria saber aonde estou errando. Porque minha index "Sexo" não está sendo usada corretamente. E como posso melhorar isso. Por favor. Obrigado,
  6. ndias

    Em busca do melhor índice

    Vejam, por favor, se conseguem me ajudar a otimizar essa query para melhorar a performance desta consulta mySql que do jeito que está, leva cerca de 90 seg para exibir o resultado. select aa.IdArea, aa.Nome, COUNT(DISTINCT(ca.idCV )) as QtdcvAreaAtuacao from tblareaatuacao aa inner join tblcurriculoareaatuacao ca on ca.idAreaAtuacao = aa.IdArea inner join tblcadastro_curriculo_incompleto cv on cv.IdCV = ca.idCV where cv.Ativo = 'S' and cv.Excluido = 'N' and ((YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) >= 16 or (datediff(YEAR(ifnull(date(cv.DataUpdate),date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) >= 16) and (YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) <= 97 or (datediff(YEAR(ifnull(date(cv.DataUpdate),date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) <= 97)) group by aa.IdArea, aa.Nome order by aa.Nome asc; Indexes: tblareaatuacao.IdArea(int) - 159 row(s) returned 0.000 sec / 0.000 sec tblcurriculoareaatuacao.idCV(char) e tblcurriculoareaatuacao.idAreaAtuacao(int) - 402183 row(s) returned 0.000 sec / 2.125 sec tblcadastro_curriculo_incompleto.IdCV(int) - 201408 row(s) returned 0.016 sec / 19.046 sec Qual seria os índices que devo criar para eu obter um desempenho melhor? Obrigado,
  7. ndias

    Migração de banco de dados

    @newallan fiz o contrário (migrei de SQL SERVER para MySQL). Usei o Migration do Workbench e deu certo. Porém, como os meus dados da SQL SERVER estavam no servidor que NÃO era Localhost, precisei pedir algumas permissões onde ele estava hospedado para eu conseguir extrair.
  8. ndias

    select count case

    muito obrigado @Mota É isso mesmo!!! abraços
  9. ndias

    select count case

    @Mota eu tenho esse select: select e.IDEmpresa, e.Razao, e.Ramo, e.Cidade from tblconexoes c inner join tblempresa e on e.IDEmpresa = c.idEmpresa where c.Excluido = 'N' and c.idCV = 190273 Preciso acrescentar isso sum(CASE WHEN tbl1 .dtCadastro = CURDATE() THEN 1 ELSE 0 END) as qtdDia Quero que o resultado seja 3579 LIFE Comércio varejista BELO HORIZONTE 3 3578 VIBE Comércio de produtos SAO PAULO 3 3577 NICE Comércio de serviços RIO DE JANEIRO 3 Depois preciso acrescentar e.IDEmpresa = 3578 na cláusula where e quero que o resultado seja assim: 3578 VIBE Comércio de produtos SAO PAULO 3
  10. ndias

    select count case

    ñ rolou! pq ele traz um único registrodo id 123
  11. ndias

    select count case

    preciso fazer um select assim: Select count(CASE WHEN tbl1.dtCadastro = CURDATE() THEN '' ELSE NULL END) as qtdDia, tbl2.id from tbl1 inner join tbl2 on tbl2.id = tbl1.id and tbl2.id = 123 where tbl1.int = 190273 eu quero que o Count me traga q a quantidade de registros no dia, e por por conta do tbl2.id = 123 ele está trazendo apenas um alguém pode me ajudar, por favor?
  12. ndias

    [Resolvido] MySql COUNT com WHERE, o count é lento

    @Mota o problema era mesma a falta de índices...muito obrigado
  13. ndias

    [Resolvido] MySql COUNT com WHERE, o count é lento

    @Mota ñ fiz o plano de execução! ñ estou usando SQL. Eu usava SQL e não tinha problema com lentidão. Daí eu migrei para MySql e parece que a consulta fica lenta por causa do where pois percorre a tabela toda (que não é pequena) para contar os registros.
  14. ndias

    [Resolvido] MySql COUNT com WHERE, o count é lento

    @Motañ possuem índices e as estatísticas estão atualizadas SIM...inclusive essa mesma query eu rodava de boa no MS-SQL. Só que resolvi migrar de banco de dados e to enfrentando essa dificuldade com MySql
  15. select t1.id, (select count(campo) from tabela2 where id = t1.id) from tabela1 t1 where ....... select t1.id, (select count(t2.campo) from tabela2 t2 inner join tabela1 on tabela1.id = t2.id where t2.id = t1.id) from tabela1 t1 where ....... select t1.id, count(t2.campo) from tabela1 t1 left join tabela t2 on t2.id = t1.id where ....... Estou tentando dessas 3 formas e a única que roda é a segunda...mesmo assim, com muita lentidão...  Existe alguma outra melhor forma de montar essa query?
×

Informação importante

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