Arquivo

Archive for the ‘Não categorizado’ Category

Novo artigo

7 de janeiro de 2010 Deixe um comentário

Pessoal

Estou MUITO feliz em dizer que outro artigo meu foi publicado no Simple-Talk,

Convido a todos para ler e deixar comentários… (como sempre né galera… positivos…rs.. se tiver alguma coisa errada me manda no e-mail :-))

Particularmente eu acho esse o mais interessante de tudo que já escrevi… bom fica ai pra vcs… abraços

http://www.simple-talk.com/sql/t-sql-programming/13-things-you-should-know-about-statistics-and-the-query-optimizer/

Aaaa, se quiserem ver os outros clique aqui… http://www.simple-talk.com/author/fabiano-amorim/

Categorias:Não categorizado

Friends of Red-Gate, Sim, tbm sou!

1 de dezembro de 2009 5 comentários

Pessoal depois que vi o post do meu amigo Alex Rosa falando sobre o programa “Friends of Red-Gate” fiquei bem interessado no assunto já que as ferramentas da Red-Gate são muito úteis para quem trabalha com SQL Server, o SQL Prompt é uma verdadeira mão na roda.

Bom, primeiro agradeço ao Alex por me ajudar a conhecer o programa, e segundo, agradeço a Red-Gate por me conceder a honra de fazer parte do time de Amigos deles :-).

Se prepare porque com certeza você verá por ai alguns artigos do tipo, “SQL Server Intellisense vs Red-Gate SQL Prompt”

Você pode ler mais sobre o programa aqui.

image

Categorias:Não categorizado

Palestra FAEF – Como foi…

23 de novembro de 2009 Deixe um comentário

Pessoal, conforme prometi deixo aqui o link para o PPT e os arquivos que utilizei na palestra.

Foi um prazer participar desta jornada que contou com a presença de vários profissionais do Mercado.

No dia 17 eu dividi a bancada com o Rodrigo que é mestre em Engenharia de Construção Civil pela Politécnica da Universidade de São Paulo, que deu um show falando sobre Projetos, citando o seu caso de sucesso em realidade virtual.

Quando a professora Lidia me chamou para iniciar a palestra, fiquei bem contente com o que ví, vários alunos bem interessados em participar e aprender sobre SQL Server, pena que o tempo foi curto, mas com certeza valeu a pena.

Espero que tenham gostado, eu gostei…

Agradeço a professora Simone que me encontrou pela Internet e ao Google(ou será que ela usou Bing?) por me apresentar a Ela…

Segue algumas fotos e o link para download dos arquivos…

 

http://cid-52eff7477e74caa6.skydrive.live.com/embedicon.aspx/Publica/PalestraFAEF

 

Abraço.

Categorias:Não categorizado

NPTEL Courses – Computer Science & Engineering – Database Design

18 de novembro de 2009 Deixe um comentário

É por isso que eu sempre digo, apesar do inglês sofrível de ouvir, nossos amigos indianos são demais 🙂

Acesse o link abaixo para visualizar vários cursos relacionados a IT e afins …

http://nptel.iitm.ac.in/index.php

Deixo como destaque o curso de Database Design, e mais destaque ainda para os módulos sobre Query Processing and Optimization :-).

Database Design

14 – Query Processing and Optimization [56:41]
15 – Query Processing and Optimization II [56:55]
16 – Query Processing and Optimization – III [57:19]

Divirta-se!

Categorias:Não categorizado

Palestra na FAEF Garça – SP

13 de novembro de 2009 Deixe um comentário

Pessoal convido a todos que estiverem aqui pelo interior de São Paulo, para participar da jornada de Sistema de Informação que acontecerá na FAEF em Garça.

Tive a honra de receber o convite para participar como Palestrante, no dia 17/11 próxima terça-feira vou falar sobre Certificações e SQL Server.

Se estiver por aqui… conto com sua presença…

Valew

Categorias:Não categorizado

Query Optimizer VS Foreign Keys – The answer

12 de novembro de 2009 Deixe um comentário

Pessoal,

Depois que eu postei falando sobre o comportamento do QO em relação a Foreign Keys, resolvi enviar um exemplo para o meu Mestre em Query Processor Conor Cunningham.

Bom como sempre ele deu um show de resposta… Concordo com ele que deve ser MUITO difícil decidir o que entra e o que fica de fora do QO, encontrar este balanceamento perfeito entre o tempo de criação do plano versus a quantidade de analises que são efetuadas é sem dúvida uma árdua tarefa.

Eu sonho com o dia em que conseguiremos de alguma forma deixar o QO tão esperto a ponto de não se preocupar com as “Mentes Brilhantes” que vemos por ai… Até que este dia não chegue, escreva suas consultas com atenção e quando terminar de escrevê-la sempre pense, ficou bom?

Leitura imperdível.

http://blogs.msdn.com/conor_cunningham_msft/

Abraço.

Categorias:Não categorizado

Cuidado com o IF Exists 3

27 de outubro de 2009 Deixe um comentário

 

De: Medina, Edvaldo
Enviada em: terça-feira, 27 de outubro de 2009 09:33
Para: Amorim, Fabiano
Assunto: ENC: Cuidado com o IF EXISTS…
Prioridade: Alta

Fabiano, uma pergunta.

Se tivermos um IF com vários EXISTS com AND o SQL vai realizar todas as consultas ou no primeiro que for falso o sistema já finaliza a condição, exemplo:

IF (@B = ‘S’) AND

     (EXISTS(SELECT)) AND

     (EXISTS(SELECT)) AND

     (EXISTS(SELECT)) AND

     (@A = ‘S’)

BEGIN

END

———————————————–

De: Amorim, Fabiano
Enviada em: terça-feira, 27 de outubro de 2009 10:11
Para: Medina, Edvaldo
Assunto: RES: Cuidado com o IF EXISTS…

Cara, infelizmente ele vai avaliar todas as consultas, para depois pegar o resultado delas e fazer o IF. Por ex:

DECLARE @A VarChar(1)

SET @A = ‘X’

IF (@A = ‘X’)

AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 1)

AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 2)

AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 3)

AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 4)

AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = -1)

BEGIN

SELECT ‘Existe’

END

Ele vai executar todos os selects na CONVE002 guardar o resultado em memória e usar um operador de compute scalar para validar o IF.

Veja no plano de execução, que o operador de compute scalar é o último a ser executado… Não sei não mais acho que o ideal seria ter uma validação para cada consulta…

clip_image002

Categorias:Não categorizado

Cuidado com o IF Exists 2

26 de outubro de 2009 Deixe um comentário

Pessoal parei para pensar um pouco e aquele loop, virou isso,

CREATE TABLE CONCRAUX (ID Int,
                       CONSTRAINT XPKCONCRAUX PRIMARY KEY(ID))
GO
DECLARE @I Int
SET @I = 1
WHILE @I < 1000
BEGIN
  INSERT INTO CONCRAUX(ID) VALUES(@I);
  SET @I = @I + 1
END

GO

SELECT @ID_Grupo,
       @CD_Grupo,
       CONCRAUX.ID AS CD_Cota,
       ISNULL(CONVE046.SN_Utilizada,’N’) AS ST_Reserva
  FROM CONCRAUX
  LEFT OUTER JOIN CONVE002
    ON CONCRAUX.ID = CONVE002.CD_Cota
   AND CONVE002.ID_Grupo = @ID_Grupo
   AND CONVE002.Versao   = 0
  LEFT OUTER JOIN CONVE046
    ON CONVE046.ID_Grupo     = @ID_Grupo
   AND CONVE046.CD_Cota      = CONCRAUX.ID
   AND CONVE046.DT_Validade >= @DT_Base
   AND CONVE046.SN_Utilizada = ‘N’
WHERE CONCRAUX.ID <= @NO_Maximo_Cota
   AND CONVE002.ID_Cota IS NULL
   AND (@ST_Reserva = ‘T’ OR ISNULL(CONVE046.SN_Utilizada,’N’) = @ST_Reserva)

Ou seja, criei uma tabela sequencial, e fiz o join com ela.

Categorias:Não categorizado

Cuidado com o IF EXISTS…

26 de outubro de 2009 Deixe um comentário

Aqui estou em Buenos Aires trabalhando na otimização de algumas rotinas…. e fica uma dica rápida,

Pessoal quando criarem código SQL, tentem pensar como o banco de dados, por exemplo, cuidado com instruções do tipo:

  WHILE @CD_Cota <= @NO_Maximo_Cota
  BEGIN
    IF NOT EXISTS (SELECT ID_Cota
                     FROM CONVE002 (NOLOCK)
                    WHERE CD_Cota  = @CD_Cota
                      AND ID_Grupo = @ID_Grupo
                      AND Versao = 0)
    AND ((@ST_Reserva = ‘T’) OR (dbo.fn_VeSNCotaReservada(@ID_Grupo, @CD_Cota, @DT_Base) = @ST_Reserva))

    BEGIN
      SET @ST_Reserva_Cota = dbo.fn_VeSNCotaReservada(@ID_Grupo, @CD_Cota, @DT_Base)

      INSERT INTO @tb_Reserva (ID_Grupo,
                               CD_Grupo,
                               CD_Cota,
                               ST_Reserva)
      VALUES (@ID_Grupo,
              @CD_Grupo,
              @CD_Cota,
              @ST_Reserva_Cota)
    END

    SET @CD_Cota = @CD_Cota + 1;
  END

Ou seja, para validar este IF, o SQL vai terá que ler a tabela CONVE002, depois vai ler o resultado da fn_VeSN… para resolver o EXISTS e depois vai ler denovo a fn_VeSN….

Isso funciona bem quando estamos falando de C# ou Pascal, mas como estamos falando de banco, o Ideal seriamos utilizar várias instruções de IF. Por ex:

WHILE @CD_Cota <= @NO_Maximo_Cota
BEGIN
  IF NOT EXISTS (SELECT ID_Cota
                   FROM CONVE002 (NOLOCK)
                  WHERE CD_Cota  = @CD_Cota
                    AND ID_Grupo = @ID_Grupo
                    AND Versao = 0)
  BEGIN
    IF (@ST_Reserva = ‘T’)
    BEGIN
      INSERT INTO @tb_Reserva (ID_Grupo,
                               CD_Grupo,
                               CD_Cota,
                               ST_Reserva)
      VALUES (@ID_Grupo,
              @CD_Grupo,
              @CD_Cota,
              @ST_Reserva_Cota)
    END
    ELSE
    BEGIN
      SET @ST_Reserva_Cota = dbo.fn_VeSNCotaReservada(@ID_Grupo, @CD_Cota, @DT_Base);
      IF (@ST_Reserva_Cota = @ST_Reserva)
      BEGIN
        INSERT INTO @tb_Reserva (ID_Grupo,
                                 CD_Grupo,
                                 CD_Cota,
                                 ST_Reserva)
        VALUES (@ID_Grupo,
                @CD_Grupo,
                @CD_Cota,
                @ST_Reserva_Cota)
      END
    END
  END   

  SET @CD_Cota = @CD_Cota + 1;
END

Ou seja, removemos o disperdicio …

Categorias:Não categorizado

Artigos no ST

23 de outubro de 2009 Deixe um comentário

Pessoal,

Mais 2 de meus artigos foram publicados no Simple Talk.

Novamente convido a todos para ler e se possível votar ( positivamente é claro 🙂 ).

Seguem os links:

http://www.simple-talk.com/sql/t-sql-programming/data-correlation-optimization-internals/

http://www.simple-talk.com/sql/t-sql-programming/query-optimizer-and-cartesian-products/

Abraço.

Categorias:Não categorizado