Arquivo
Novo artigo
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
Aaaa, se quiserem ver os outros clique aqui… http://www.simple-talk.com/author/fabiano-amorim/
Friends of Red-Gate, Sim, tbm sou!
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.
Palestra FAEF – Como foi…
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.
NPTEL Courses – Computer Science & Engineering – Database Design
É 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 :-).
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!
Palestra na FAEF Garça – SP
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
Query Optimizer VS Foreign Keys – The answer
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.
Cuidado com o IF Exists 3
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…
Cuidado com o IF Exists 2
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.
Cuidado com o IF EXISTS…
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 …
Artigos no ST
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.








