Ir para conteúdo
Fórum Script Brasil

boxpaulomuniz@gmail.com

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre boxpaulomuniz@gmail.com

boxpaulomuniz@gmail.com's Achievements

0

Reputação

  1. Tenho uma dúvida se existe um comando SQL para medir o tempo gasto para fazer a consulta SQL. Segue um estudo de caso onde faço um exemplo. Se alguém souber compartilha aqui Temos uma tabela Funcionarios com as seguintes atributos DESCRIBE Funcionarios; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | idFuncionario | int | YES | | NULL | | | nome | varchar(100) | YES | | NULL | | | email | varchar(200) | YES | | NULL | | | sexo | varchar(10) | YES | | NULL | | | departamento | varchar(100) | YES | | NULL | | | admissao | varchar(10) | YES | | NULL | | | salario | int | YES | | NULL | | | cargo | varchar(100) | YES | | NULL | | | idRegiao | int | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+ Em um QUANT de 976 funcionarios SELECT COUNT(*) FROM FUNCIONARIOS; +----------+ | COUNT(*) | +----------+ | 976 | +----------+ Sendo distruibuido da seguinte maneira SELECT SEXO, COUNT(*) FROM FUNCIONARIOS GROUP BY SEXO; +-----------+----------+ | SEXO | COUNT(*) | +-----------+----------+ | Feminino | 491 | | Masculino | 485 | +-----------+----------+ Contando funcionários por departamento; Contando quantos funcionarios tem em cada departamento SELECT COUNT(*), DEPARTAMENTO FROM FUNCIONARIOS GROUP BY DEPARTAMENTO ORDER BY 1; +----------+--------------+ | COUNT(*) | DEPARTAMENTO | +----------+--------------+ | 21 | Filmes | | 36 | Joalheria | | 37 | Música | | 38 | Crianças | | 39 | Ferramentas | | 40 | Esporte | | 41 | Brinquedos | | 43 | Calçados | | 46 | Automotivo | | 46 | Alimentícios | | 46 | Bebês | | 46 | Saúde | | 47 | Industrial | | 47 | Jardim | | 47 | Books | | 48 | Outdoors | | 49 | Games | | 49 | Eletronicos | | 52 | Computadores | | 52 | Lar | | 53 | Roupas | | 53 | Beleza | +----------+--------------+ -- Contando quantos funcionarios tem nos departamentos ROUPAS e FILMES SELECT DEPARTAMENTO, COUNT(*)AS QUANT FROM FUNCIONARIOS WHERE DEPARTAMENTO='ROUPAS' OR DEPARTAMENTO='FILMES' GROUP BY DEPARTAMENTO; +--------------+-------+ | DEPARTAMENTO | QUANT | +--------------+-------+ | Roupas | 53 | | Filmes | 21 | +--------------+-------+ 2 rows in set (0.00 sec) --Queremos uma consulta que traga os funcionarios que trabalhem --no departamento de "Filmes" OU no departamento de "Roupas" --Temos duas opções: SELECT NOME,DEPARTAMENTO FROM FUNCIONARIOS WHERE DEPARTAMENTO='ROUPAS' OR DEPARTAMENTO='FILMES' ORDER BY DEPARTAMENTO; +------------+--------------+ | NOME | DEPARTAMENTO | +------------+--------------+ | Cooper | Filmes | | Spencer | Filmes | | Kelley | Filmes | | Roberts | Filmes | | Gonzales | Filmes | | Little | Filmes | | Snyder | Filmes | | Gordon | Filmes | | Griffin | Filmes | | Warren | Filmes | | Arnold | Filmes | | Clark | Filmes | | Johnson | Filmes | | Walker | Filmes | | Elliott | Filmes | | Weaver | Filmes | | Gomez | Filmes | | Knight | Filmes | | Rice | Filmes | | Price | Filmes | | Bishop | Filmes | | Rose | Roupas | | Richardson | Roupas | | Fisher | Roupas | | Berry | Roupas | | Arnold | Roupas | | Jordan | Roupas | | Wright | Roupas | | Gonzales | Roupas | | Young | Roupas | | White | Roupas | | Marshall | Roupas | | Boyd | Roupas | | Gray | Roupas | | Gomez | Roupas | | Williamson | Roupas | | Richards | Roupas | | Black | Roupas | | Kim | Roupas | | James | Roupas | | Taylor | Roupas | | Lynch | Roupas | | Price | Roupas | | Greene | Roupas | | Alexander | Roupas | | Phillips | Roupas | | Ortiz | Roupas | | Reid | Roupas | | Price | Roupas | | Hawkins | Roupas | | Roberts | Roupas | | Hill | Roupas | | Oliver | Roupas | | Murray | Roupas | | Richards | Roupas | | Cunningham | Roupas | | Perkins | Roupas | | Olson | Roupas | | Freeman | Roupas | | James | Roupas | | Sims | Roupas | | Nguyen | Roupas | | Washington | Roupas | | Ferguson | Roupas | | Elliott | Roupas | | Roberts | Roupas | | Watson | Roupas | | Kelley | Roupas | | Day | Roupas | | Rice | Roupas | | Marshall | Roupas | | Burton | Roupas | | Richards | Roupas | | Knight | Roupas | +------------+--------------+ --ou poderemos usar esta outra opção mas a resposta da query é mais lenta SELECT NOME,DEPARTAMENTO FROM FUNCIONARIOS WHERE DEPARTAMENTO='FILMES' OR DEPARTAMENTO='ROUPAS'; -- como temos mais funcionarios no departamento "Roupas" devemos usar -- a clasula WHERE primeiro com o valor de Departamento "Roupas" já que -- a condição é OR. Ou seja a primeira opção a performance da consulta é melhor --(mais rápida) --Suponhamos agora que o gestor de marketing da empresa pediu a lista das funcionarias --(AS) = FEMININO que trabalhem no departamento de filmes OU no departamento lar. --Ele necessita enviar um email para as colaboradoras desses dois setores. -- Contando quantos tem de cada sexo SELECT COUNT(*) AS QUANT , SEXO FROM FUNCIONARIOS GROUP BY SEXO ; +-------+-----------+ | QUANT | SEXO | +-------+-----------+ | 491 | Feminino | | 485 | Masculino | +-------+-----------+ --Fazendo a contagem de funcionarios do departamento Filmes e Lar SELECT DEPARTAMENTO, COUNT(*) AS QUANT FROM FUNCIONARIOS WHERE DEPARTAMENTO='FILMES' OR DEPARTAMENTO='LAR' GROUP BY DEPARTAMENTO ORDER BY 1; +--------------+-------+ | DEPARTAMENTO | QUANT | +--------------+-------+ | Filmes | 21 | | Lar | 52 | +--------------+-------+ 2 rows in set (0.00 sec) -- Fazendo a contagem das mulheres do departamento de lar e filmes SELECT DEPARTAMENTO,SEXO, COUNT(*) AS QUANT FROM FUNCIONARIOS WHERE SEXO='feminino' AND (DEPARTAMENTO='LAR' OR DEPARTAMENTO ='FILMES') GROUP BY DEPARTAMENTO ORDER BY 1; +--------------+----------+-------+ | DEPARTAMENTO | SEXO | QUANT | +--------------+----------+-------+ | Filmes | Feminino | 9 | | Lar | Feminino | 32 | +--------------+----------+-------+ --Como temos mais mulheres que departamentos e vamos usar na clausula AND --esse valor vem depois na consulta para verificar o sexo somente depois de --filtrado o departamentos Filmes e Lar --na expressão de consulta OR é o contrario já que temos mais mulheres no departamento --lar que no de filmes SELECT NOME,EMAIL,DEPARTAMENTO,SEXO FROM FUNCIONARIOS WHERE (DEPARTAMENTO ='LAR' OR DEPARTAMENTO='FILMES') AND SEXO ='FEMININO' ORDER BY DEPARTAMENTO; +------------+-----------------------------------+--------------+----------+ | NOME | EMAIL | DEPARTAMENTO | SEXO | +------------+-----------------------------------+--------------+----------+ | Little | dlittlecp@usatoday.com | Filmes | Feminino | | Cooper | icooper85@w3.org | Filmes | Feminino | | Gordon | egordon7k@yellowbook.com | Filmes | Feminino | | Warren | awarrenht@addthis.com | Filmes | Feminino | | Gomez | tgomezm8@ucoz.ru | Filmes | Feminino | | Knight | dknightm9@quantcast.com | Filmes | Feminino | | Rice | jricemp@columbia.edu | Filmes | Feminino | | Bishop | kbishoppi@ovh.net | Filmes | Feminino | | Walker | swalkerr0@sina.com.cn | Filmes | Feminino | | Freeman | gfreeman74@bloomberg.com | Lar | Feminino | | Gibson | bgibson8o@pen.io | Lar | Feminino | | Crawford | mcrawford8u@parallels.com | Lar | Feminino | | Campbell | pcampbell9b@istockphoto.com | Lar | Feminino | | Gonzales | jgonzales9s@sourceforge.net | Lar | Feminino | | Payne | jpayneal@comsenz.com | Lar | Feminino | | Cooper | scooperb1@cmu.edu | Lar | Feminino | | Chapman | schapmanb6@nhs.uk | Lar | Feminino | | Williams | swilliamsbc@bing.com | Lar | Feminino | | Morales | dmoralesbl@mit.edu | Lar | Feminino | | Berry | jberrybr@discuz.net | Lar | Feminino | | Porter | vporterp@yelp.com | Lar | Feminino | | Cox | ncoxe1@1und1.de | Lar | Feminino | | Morris | rmorriseu@yahoo.com | Lar | Feminino | | Walker | kwalkerf2@vinaora.com | Lar | Feminino | | Myers | dmyersfq@amazon.com | Lar | Feminino | | Olson | folsong9@acquirethisname.com | Lar | Feminino | | Evans | aevansgg@wordpress.org | Lar | Feminino | | Owens | cowensq@shareasale.com | Lar | Feminino | | Mendoza | rmendozajl@g.co | Lar | Feminino | | Ferguson | gfergusonka@geocities.jp | Lar | Feminino | | Gonzales | rgonzaleskv@meetup.com | Lar | Feminino | | Burke | eburkel4@newsvine.com | Lar | Feminino | | Murray | cmurraylx@icio.us | Lar | Feminino | | Cruz | rcruz10@blinklist.com | Lar | Feminino | | Washington | jwashington21@squidoo.com | Lar | Feminino | | Gilbert | hgilbert29@xrea.com | Lar | Feminino | | Carpenter | rcarpenterov@pagesperso-orange.fr | Lar | Feminino | | Montgomery | rmontgomery3n@chicagotribune.com | Lar | Feminino | | Jones | djonesq1@tamu.edu | Lar | Feminino | | Diaz | sdiaz64@disqus.com | Lar | Feminino | | Sanchez | tsanchezr7@lycos.com | Lar | Feminino | +------------+-----------------------------------+--------------+----------+ 41 rows in set (0.00 sec) --Para a consulta de tornar mais rápida pesquisamos primeiro a opção de menos -- ocorrencia que no caso são os Departamentos (73 ocorrencias=21+52) -- WHERE (DEPARTAMENTO ='LAR' OR DEPARTAMENTO='FILMES') AND SEXO ='FEMININO' +--------------+-------+ | DEPARTAMENTO | QUANT | +--------------+-------+ | Filmes | 21 | | Lar | 52 | +--------------+-------+ e depois o Sexo já filtrado (41 = 9+32) mulheres com a expressão WHERE SEXO ='FEMININO' +--------------+----------+-------+ | DEPARTAMENTO | SEXO | QUANT | +--------------+----------+-------+ | Filmes | Feminino | 9 | | Lar | Feminino | 32 | +--------------+----------+-------+ -- e depois concatenamos com AND SEXO ='FEMININO' --Se usassemos a query abaixo encontrariamos o mesmo resultado, --porém com uma pior performance, já que ele ia percorre 491 registros do sexo --e só depois ia checar a segunda condição SELECT NOME,EMAIL,DEPARTAMENTO,SEXO FROM FUNCIONARIOS WHERE SEXO ='FEMININO' AND (DEPARTAMENTO ='LAR' OR DEPARTAMENTO='FILMES') ORDER BY DEPARTAMENTO; --Diante da situação minha dúvida é: --Não existe um comando na consulta do SQL que possamos calcular o tempo --que o comando gera a consulta? --Qual seria?
×
×
  • Criar Novo...