Você está na página 1de 3

27/3/2014

GPO (Grupo de Profissionais Oracle) - SQL padro ANSI X SQL padro Oracle

SQL padro ANSI X SQL padro Oracle


Fbio Hernan Nuez Del Prado Publicado em Segunda, 30 Julho 2012 19:22Acessos: 1694 User Rating: Poor Best /2 Rate

Escrevi este artigo para explicar em detalhes a resposta de uma pergunta que realizada frequentemente por alunos em quase toda turma presencial de SQL ou SQL Tuning que eu leciono: Existe diferena de desempenho entre instrues SQL escritas no padro ANSI ou no padro Oracle?. Antes de dar a resposta, vamos entender primeiro o que SQL e o que so os padres ANSI SQL e Oracle. O que SQL? Resumindo, a Structured Query Language, mais conhecida pela sigla SQL, uma linguagem que foi desenvolvida no incio dos anos 70, pela IBM, para manipular bancos de dados relacionais. A partir de ento, diversos fabricantes de Sistemas Gerenciadores de Bancos de Dados relacionais (SGBDRs), como por exemplo a Oracle, comearam a desenvolver verses prprias da linguagem SQL (chamadas de dialetos ou extenses), e isso levou a necessidade da criao de uma linguagem SQL padronizada. Com a sua popularizao e sucesso, organizaes como o Instituto Americano Nacional de Padres (ANSI) e a Organizao Internacional de Padronizao (ISO), resolveram padronizar a linguagem SQL. Em 1986 foi criado um padro ANSI e em 1987 foi criado um padro ISO. A partir de ento, surgiram vrias verses do padro SQL, onde cada verso acrescenta novos comandos ou funcionalidades. Histria do padro ANSI As verses do padro ANSI existentes at a presente data so: -SQL-86: Primeira verso da linguagem, lanada em 1986, consiste basicamente na verso inicial da linguagem criada pela IBM. -SQL-92: Lanada em 1992, inclui novos recursos tais como tabelas temporrias, novas funes, expresses nomeadas, valores nicos etc. -SQL:1999 (SQL3): Lanada em 1999, foi a verso que teve mais recursos novos significativos, entre eles: a implementao de expresses regulares, recursos de orientao a objetos, queries recursivas, triggers, novos tipos de dados (boolean, LOB, array e outros), novos predicados etc. -SQL:2003: Lanada em 2003, inclui suporte bsico ao padro XML, sequncias padronizadas, instruo MERGE, colunas com valores auto-incrementais etc. -SQL:2006: Lanada em 2006, no inclui mudanas significativas para as funes e comandos SQL. Contempla basicamente a interao entre SQL e XML. Padro Oracle X padro ANSI Atualmente, os principais fabricantes de SGBDRs, implementam em seus Bancos de Dados, alm das instrues SQL referentes ao seu "dialeto", as instrues SQL do padro ANSI mais recente. No caso de instrues SQL no SGBD Oracle, o que o pessoal costuma chamar de padro Oracle ,
http://www.profissionaloracle.com.br/gpo/artigo/programacao/63-sql-padrao-ansi-x-sql-padrao-oracle 1/3

27/3/2014

GPO (Grupo de Profissionais Oracle) - SQL padro ANSI X SQL padro Oracle

o dialeto SQL da Oracle. As instrues dos dialetos normalmente surgem quando o fabricamente necessita implementar recursos no SGBD, que ainda no possuem instrues correspondentes no padro ANSI . Um exemplo muito utilizado de comando SQL do dialeto Oracle, a ligao OUTER JOIN, que o pessoal costuma escrever utilizando o caractere +. Vejam as diferenas na imagem 01:

Agora que j sabemos o que o padro Oracle e o que o padro ANSI, vou explicar qual desses padres pode proporcionar melhor performance s instrues SQL, no caso do Banco de Dados Oracle. Antes ainda, de falar sobre a performance dos 2 padres, vou comentar sobre outros itens, que me fazem defender o uso do padro ANSI. Entre eles, vou destacar os seguintes: - Permite que voc migre a aplicao contendo as instrues SQL para outro BD sem ter que fazer qualquer alterao; - As ligaes entre colunas so mais fceis de ser identificadas, pois ficam fora da clusula WHERE (separadas das condies de filtro). Essa facilidade pode muitas vezes facilitar manuteno futura e evitar queries ruins. J vi muita gente escrever queries no padro Oracle e esquecer de incluir uma coluna necessria para a ligao correta entre 2 tabelas. Para evitar linhas duplicadas, resultantes do produto cartesiano gerado pela falta da coluna necessria na ligao, o desenvolvedor inclua a instruo DISTINCT."Uma tremenda gambiarra para corrigir um erro de programao, que gerava degradao da performance da query"; - Permite fazer OUTER JOIN com parmetros de stored procedures. No padro Oracle voc no consegue fazer isso. Eu comecei a escrever instrues SQL no padro ANSI em 2005, quando percebi que somente o padro ANSI permitia isso; Bom... agora quanto performance: utilize o padro ANSI! Desde a implantao do otimizador baseado em custo (CBO) no Oracle Database, a Oracle recomenda a utilizao do padro ANSI, pois o CBO foi desenvolvido com base neste padro. Deste modo, as instrues SQL escritas no padro ANSI podem gerar planos de execuo melhores, e consequentemente, sero executadas mais rapidamente! Na prtica, dificilmente voc encontrar diferenas no plano de execuo gerado entre os 2 padres, mas... um dia voc encontrar! Isso j aconteceu comigo em uma turma de SQL Tuning que lecionei em 08/2011. Uma das alunas refez uma instruo SQL do treinamento utilizando o padro Oracle e o plano de execuo gerado pelo otimizador ficou diferente. No plano da instruo ANSI o otimizador usava um ndice para acessar uma das tabelas. No plano da instruo Oracle o otimizador fazia Full
http://www.profissionaloracle.com.br/gpo/artigo/programacao/63-sql-padrao-ansi-x-sql-padrao-oracle 2/3

27/3/2014

GPO (Grupo de Profissionais Oracle) - SQL padro ANSI X SQL padro Oracle

Table Scan, logo, a instruo SQL escrita no padro ANSI tinha um tempo de execuo melhor! Concluso Escrever instrues SQL utilizando o padro ANSI pode nos oferecer alguns benefcios, como por exemplo, portabilidade entre diversos SGBDs, melhor organizao da instruo SQL e uma possvel melhora de performance. Evite o padro Oracle, pois o padro ANSI um padro de mercado e pode ser utilizado em qualquer SGBD. Referncias SQL: http://pt.wikipedia.org/wiki/SQL Padro SQL e sua Evoluo: http://www.ic.unicamp.br/~geovane/mo410-091/Ch05-PadraoSQLart.pdf Histria do Padro SQL: http://www.altabooks.com.br/capitulos_amostra/sql_cap_amostra.pdf Oracle Database SQL Reference: http://docs.oracle.com/cd/B12037_01/server.101/b10759/queries006.htm

Abrao Fbio Prado - Leia mais sobre o autor

http://www.profissionaloracle.com.br/gpo/artigo/programacao/63-sql-padrao-ansi-x-sql-padrao-oracle

3/3