{"id":300,"date":"2016-02-14T23:24:36","date_gmt":"2016-02-15T01:24:36","guid":{"rendered":"http:\/\/dbtimewizard.com.br\/blog\/?p=300"},"modified":"2019-10-10T22:55:07","modified_gmt":"2019-10-11T01:55:07","slug":"nested-loop-ou-hash-join-qual-a-melhor-opcao-para-juncao-de-tabelas","status":"publish","type":"post","link":"https:\/\/dbtimewizard.com.br\/blog\/nested-loop-ou-hash-join-qual-a-melhor-opcao-para-juncao-de-tabelas\/","title":{"rendered":"NESTED LOOP ou HASH JOIN? Qual a melhor op\u00e7\u00e3o para jun\u00e7\u00e3o de tabelas?"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">O NESTED LOOP e o HASH JOIN n\u00e3o s\u00e3o as \u00fanicas op\u00e7\u00f5es utilizadas pelo Otimizador do Oracle para fazer a jun\u00e7\u00e3o de linhas de duas tabelas, mas s\u00e3o as op\u00e7\u00f5es mais utilizadas. Neste artigo vamos explorar um pouco como funcionam essas opera\u00e7\u00f5es e verificar qual delas \u00e9 a melhor op\u00e7\u00e3o para o Otimizador.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Vamos come\u00e7ar respondendo a quest\u00e3o que tamb\u00e9m \u00e9 o titulo desse artigo, NESTED LOOP ou HASH JOIN? Qual a melhor op\u00e7\u00e3o para o Otimizador realizar uma opera\u00e7\u00e3o de jun\u00e7\u00e3o de duas tabelas? A resposta \u00e9: depende, sim depende do tamanho das tabelas envolvidas, se existem \u00edndices nas colunas utilizadas como chave da jun\u00e7\u00e3o, da seletividade das colunas do filtro da cl\u00e1usula WHERE, etc&#8230; Para facilitar o entendimento vamos come\u00e7ar com uma breve descri\u00e7\u00e3o das duas opera\u00e7\u00f5es e em seguida vamos fazer simula\u00e7\u00f5es para consolidar essa teoria.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Defini\u00e7\u00e3o NESTED LOOP<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Opera\u00e7\u00e3o utilizada para jun\u00e7\u00e3o de duas tabelas, nessa opera\u00e7\u00e3o as linhas da tabela externa (Condutora) s\u00e3o recuperados e para cada linha dessa tabela s\u00e3o recuperadas linhas da tabela interna (Conduzida). Essa opera\u00e7\u00e3o \u00e9 utilizada pelo Otimizador quando um pequeno conjunto de linhas de cada uma das tabela s\u00e3o utilizadas na jun\u00e7\u00e3o das duas tabelas e o m\u00e9todo de acesso normalmente utilizado para recuperar as linhas da tabela interna \u00e9 um \u00edndice.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Defini\u00e7\u00e3o HASH JOIN<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Opera\u00e7\u00e3o utilizada para jun\u00e7\u00e3o de duas tabelas quando o conjunto de linhas a ser recuperado dessas tabelas \u00e9 grande, o Otimizador utiliza a tabela que possui o menor conjunto de linhas (BUILD TABLE) para criar um &#8220;HASH TABLE&#8221; na memoria (in-memory hash) e busca na outra tabela (PROBE TABLE) as linhas que corresponde a fun\u00e7\u00e3o HASH da primeira tabela.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Descri\u00e7\u00e3o da simula\u00e7\u00e3o<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Para compreender melhor essas defini\u00e7\u00f5es vamos fazer tr\u00eas simula\u00e7\u00f5es utilizando o &#8220;<strong><a href=\"https:\/\/docs.oracle.com\/cd\/E18283_01\/server.112\/e10831\/overview.htm#sthref6\" target=\"_blank\">SAMPLE SCHEMA SH<\/a><\/strong>&#8220;, na primeira simula\u00e7\u00e3o nossa consulta vai selecionar poucas linhas e o Otimizador vai escolher um plano de execu\u00e7\u00e3o com NESTED LOOP, na segunda simula\u00e7\u00e3o vamos alterar o filtro da cl\u00e1usula WHERE para selecionar uma grande quantidade de linhas e neste caso o Otimizador escolher\u00e1 a opera\u00e7\u00e3o HASH JOIN, na ultima simula\u00e7\u00e3o vamos utilizar um HINT para for\u00e7ar o Otimizador utilizar NESTED LOOP para fazer o JOIN da mesma consulta utilizada na segunda simula\u00e7\u00e3o e vamos comparar os resultados em termos de desempenho.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Caso tenha alguma d\u00favida na leitura do plano de execu\u00e7\u00e3o gerado pelo pacote DBMS_XPLAN consulte a s\u00e9rie de artigos que vai ajuda-lo a interpretar essas informa\u00e7\u00f5es:<\/span><\/p>\n<p><strong><span style=\"font-size: 12pt;\">1. <a href=\"http:\/\/dbtimewizard.com.br\/blog\/execution-plan-como-verificar-a-ordem-que-as-operacoes-sao-realizadas\/\" target=\"_blank\">Como verificar a ordem que as opera\u00e7\u00f5es s\u00e3o realizadas<\/a><\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">2. <a href=\"http:\/\/dbtimewizard.com.br\/blog\/execution-plan-como-interpretar-os-valores-estatisticos-estimados\/\" target=\"_blank\">Como interpretar os valores estat\u00edsticos estimados<\/a><\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">3. <a href=\"http:\/\/dbtimewizard.com.br\/blog\/execution-plan-como-interpretar-os-valores-estatisticos-coletados-durante-a-execucao\/\" target=\"_blank\">Como interpretar os valores estat\u00edsticos coletados durante a execu\u00e7\u00e3o<\/a><\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">4. <a href=\"http:\/\/dbtimewizard.com.br\/blog\/execution-plan-como-interpretar-as-secoes-nao-estatisticas-do-plano-de-execucao\/\" target=\"_blank\">Como interpretar as se\u00e7\u00f5es n\u00e3o estat\u00edsticas do plano de execu\u00e7\u00e3o<\/a><\/span><\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-size: 14pt;\">Jun\u00e7\u00e3o de tabelas com NESTED LOOP<br \/>\n<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Nesta simula\u00e7\u00e3o nossa consulta vai selecionar 75 linhas, o Otimizador decide que a melhor op\u00e7\u00e3o ser\u00e1 um NESTED LOOP, pois o JOIN consistir\u00e1 da leitura de 1 linha da tabela COUNTRIES e 75 linhas da tabela CUSTOMERS.<\/span><\/p>\n<p>&nbsp;<\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:800px;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/><\/div><\/td><td><div class=\"php codecolorer\">sh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span> FROM V<span class=\"re0\">$VERSION<\/span> where rownum <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nBANNER<br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------<\/span><br \/>\nOracle Database 11g Enterprise Edition Release 11<span class=\"sy0\">.<\/span>2<span class=\"sy0\">.<\/span>0<span class=\"sy0\">.<\/span>4<span class=\"sy0\">.<\/span>0 <span class=\"sy0\">-<\/span> Production<br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> set tab off<span class=\"sy0\">;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> set lines <span class=\"nu0\">300<\/span> pages <span class=\"nu0\">100<\/span><span class=\"sy0\">;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSession altered<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* tst001 *\/<\/span> co<span class=\"sy0\">.<\/span>COUNTRY_ID<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_FIRST_NAME<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_CITY<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from countries co<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; customers cu<br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; where co<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span> cu<span class=\"sy0\">.<\/span>COUNTRY_ID<br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; and co<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span> <span class=\"nu0\">52787<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCOUNTRY_ID CUST_FIRST_NAME &nbsp; &nbsp; &nbsp;CUST_CITY<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------<\/span> <span class=\"sy0\">------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Arnold &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Augustus &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Bertilde &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Bertram &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Beulah &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Byron &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Bryant &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">.....<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">.....<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">.....<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Pavani &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Sydney &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Ramkumar &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Pablo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Riyadh<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52787<\/span> Joshua &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Riyadh<br \/>\n<br \/>\n<span class=\"nu0\">75<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%tst001%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\ncc7vkhbu2thgt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nold &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw2\">new<\/span> &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'cc7vkhbu2thgt'<\/span><span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">-------------------------------------------------------------------------------------------------------------<\/span><br \/>\nEXPLAINED SQL STATEMENT<span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">------------------------<\/span><br \/>\nselect <span class=\"coMULTI\">\/* tst001 *\/<\/span> co<span class=\"sy0\">.<\/span>COUNTRY_ID<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_FIRST_NAME<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_CITY<br \/>\nfrom countries co<span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp;customers cu &nbsp;where co<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span><br \/>\ncu<span class=\"sy0\">.<\/span>COUNTRY_ID &nbsp; &nbsp;and co<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span> <span class=\"sy0\">:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">763797669<\/span><br \/>\n<br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">75<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">1462<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;NESTED LOOPS &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">75<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">75<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">1462<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; INDEX UNIQUE SCAN<span class=\"sy0\">|<\/span> COUNTRIES_PK <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS FULL<span class=\"sy0\">|<\/span> CUSTOMERS &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">75<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">75<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">1461<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">-<\/span> filter<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">23<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Jun\u00e7\u00e3o de tabelas com HASH JOIN<\/span><\/h2>\n<p><span style=\"font-size: 12pt;\">Nesta segunda simula\u00e7\u00e3o vamos filtrar tr\u00eas pa\u00edses no campo COUNTRY_ID da cl\u00e1usula WHERE o que vai aumentar nossa sele\u00e7\u00e3o de linhas para aproximadamente 34 mil linhas, com essa estimativa o Otimizador decide que a melhor op\u00e7\u00e3o para realizar esta jun\u00e7\u00e3o \u00e9 a opera\u00e7\u00e3o HASH JOIN.<\/span><\/p>\n<p>&nbsp;<\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:800px;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/><\/div><\/td><td><div class=\"php codecolorer\">sh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* tst002 *\/<\/span> co<span class=\"sy0\">.<\/span>COUNTRY_ID<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_FIRST_NAME<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_CITY<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from countries co<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; customers cu<br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; where co<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span> cu<span class=\"sy0\">.<\/span>COUNTRY_ID<br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; and co<span class=\"sy0\">.<\/span>COUNTRY_ID in <span class=\"br0\">&#40;<\/span><span class=\"nu0\">52770<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">52776<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">52790<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCOUNTRY_ID CUST_FIRST_NAME &nbsp; &nbsp; &nbsp;CUST_CITY<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------<\/span> <span class=\"sy0\">------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ede<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Hoofddorp<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Schimmert<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Scheveningen<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Haarlem<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Lelystad<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52776<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Murnau<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Los Angeles<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52776<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Stuttgart<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Montara<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">.....<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">.....<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">.....<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Jordan &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Molino<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Sydney &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Evinston<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Boriana &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Orlinda<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Jade &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Norman<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Joshua &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cleveland<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Andrew &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Duncan<br \/>\n<br \/>\n<span class=\"nu0\">34473<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%tst002%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\n9z5f0k26an9vy &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nold &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw2\">new<\/span> &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'9z5f0k26an9vy'<\/span><span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">-------------------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\nEXPLAINED SQL STATEMENT<span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">------------------------<\/span><br \/>\nselect <span class=\"coMULTI\">\/* tst002 *\/<\/span> co<span class=\"sy0\">.<\/span>COUNTRY_ID<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_FIRST_NAME<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_CITY<br \/>\nfrom countries co<span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp;customers cu &nbsp;where co<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span><br \/>\ncu<span class=\"sy0\">.<\/span>COUNTRY_ID &nbsp; &nbsp;and co<span class=\"sy0\">.<\/span>COUNTRY_ID in <span class=\"br0\">&#40;<\/span><span class=\"sy0\">:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span><span class=\"sy0\">,:<\/span><span class=\"st0\">&quot;SYS_B_1&quot;<\/span><span class=\"sy0\">,:<\/span><span class=\"st0\">&quot;SYS_B_2&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">1865765122<\/span><br \/>\n<br \/>\n<span class=\"sy0\">----------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">----------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.08<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">3697<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;<a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">HASH<\/span><\/a> <a href=\"http:\/\/www.php.net\/join\"><span class=\"kw3\">JOIN<\/span><\/a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">5443<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.08<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">3697<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; INLIST ITERATOR &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;INDEX UNIQUE SCAN<span class=\"sy0\">|<\/span> COUNTRIES_PK <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS FULL <span class=\"sy0\">|<\/span> CUSTOMERS &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.05<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">3695<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">----------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0 OR <span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1 OR<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_2<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">4<\/span> <span class=\"sy0\">-<\/span> filter<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0 OR <span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1 OR<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_2<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">27<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Jun\u00e7\u00e3o de tabelas usando HINT<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Nas duas primeiras simula\u00e7\u00f5es observamos que o Otimizador escolheu o tipo de opera\u00e7\u00e3o JOIN baseado nas defini\u00e7\u00f5es de cada uma delas, mas ser\u00e1 que essas escolhas foram realmente as melhores em termos de desempenho? Vamos fazer uma terceira simula\u00e7\u00e3o utilizando a segunda consulta, mas desta vez vamos utilizar um HINT para for\u00e7ar a utiliza\u00e7\u00e3o de uma opera\u00e7\u00e3o de JOIN diferente da escolhida pelo Otimizando na segunda simula\u00e7\u00e3o e comparar o desempenho dessa consulta com sua antecessora.<\/span><\/p>\n<p>&nbsp;<\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:800px;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/><\/div><\/td><td><div class=\"php codecolorer\">sh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/*+ USE_NL(co cu) *\/<\/span> co<span class=\"sy0\">.<\/span>COUNTRY_ID<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_FIRST_NAME<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_CITY<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from countries co<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; customers cu<br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; where co<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span> cu<span class=\"sy0\">.<\/span>COUNTRY_ID<br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; and co<span class=\"sy0\">.<\/span>COUNTRY_ID in <span class=\"br0\">&#40;<\/span><span class=\"nu0\">52770<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">52776<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">52790<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCOUNTRY_ID CUST_FIRST_NAME &nbsp; &nbsp; &nbsp;CUST_CITY<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------<\/span> <span class=\"sy0\">------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ede<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Hoofddorp<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Schimmert<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Scheveningen<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Haarlem<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52770<\/span> Abigail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Lelystad<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52776<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Murnau<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Los Angeles<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52776<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Stuttgart<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Montara<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52776<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Neuss<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52776<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Schwaebisch Gmuend<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">...<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">...<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"sy0\">...<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Boriana &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Orlinda<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Jade &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Norman<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Joshua &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cleveland<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">52790<\/span> Andrew &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Duncan<br \/>\n<br \/>\n<span class=\"nu0\">34473<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%USE_NL(co cu)%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\n69sh8pmxx610j &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nold &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw2\">new<\/span> &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'69sh8pmxx610j'<\/span><span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'basic iostats last'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">-----------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\nEXPLAINED SQL STATEMENT<span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">------------------------<\/span><br \/>\nselect <span class=\"coMULTI\">\/*+ USE_NL(co cu) *\/<\/span> co<span class=\"sy0\">.<\/span>COUNTRY_ID<span class=\"sy0\">,<\/span> cu<span class=\"sy0\">.<\/span>CUST_FIRST_NAME<span class=\"sy0\">,<\/span><br \/>\ncu<span class=\"sy0\">.<\/span>CUST_CITY &nbsp; from countries co<span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp;customers cu &nbsp;where<br \/>\nco<span class=\"sy0\">.<\/span>COUNTRY_ID <span class=\"sy0\">=<\/span> cu<span class=\"sy0\">.<\/span>COUNTRY_ID &nbsp; &nbsp;and co<span class=\"sy0\">.<\/span>COUNTRY_ID in<br \/>\n<span class=\"br0\">&#40;<\/span><span class=\"sy0\">:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span><span class=\"sy0\">,:<\/span><span class=\"st0\">&quot;SYS_B_1&quot;<\/span><span class=\"sy0\">,:<\/span><span class=\"st0\">&quot;SYS_B_2&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">1539906852<\/span><br \/>\n<br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.13<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">5998<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;NESTED LOOPS &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">5443<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.13<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">5998<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS FULL<span class=\"sy0\">|<\/span> CUSTOMERS &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.06<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">3696<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; INDEX UNIQUE SCAN<span class=\"sy0\">|<\/span> COUNTRIES_PK <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">34473<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.04<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">2302<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">-<\/span> filter<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0 OR <span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1 OR<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_2<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;CU&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;filter<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0 OR <span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1 OR<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;CO&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;COUNTRY_ID&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_2<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">27<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Comparando os planos de execu\u00e7\u00e3o da segunda e terceira simula\u00e7\u00e3o podemos observar que a terceira simula\u00e7\u00e3o teve um desempenho inferior a segunda, o tempo de resposta aumentou de 8 para 13 cent\u00e9simos de segundos e o n\u00famero de buffers lidos aumento de 3697 para 5998, parece pouco mas se essa consulta fizer parte de uma aplica\u00e7\u00e3o que precisa execut\u00e1-la milh\u00f5es de vezes durante o dia a diferen\u00e7a passa ser significativa. O plano de execu\u00e7\u00e3o da segunda simula\u00e7\u00e3o teve um desempenho melhor e a opera\u00e7\u00e3o de jun\u00e7\u00e3o foi uma escolha acertada do Otimizador.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Conclus\u00e3o<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Como pudemos observar em nossas simula\u00e7\u00f5es o Otimizador \u00e9 muito competente na escolha do tipo de opera\u00e7\u00e3o JOIN a ser utilizada na jun\u00e7\u00e3o de duas tabelas, mas a escolha dele \u00e9 feita baseada em objetos existentes no banco de dados naquele momento, em determinadas situa\u00e7\u00f5es a escolha feita pelo Otimizador pode n\u00e3o ser a melhor devido a falta de um \u00edndice, estat\u00edsticas insuficientes ou desatualizadas, incompatibilidade de tipos de coluna de dados, etc&#8230; Nesse momento podemos aplicar os conceitos abordados neste artigo para analisar o plano de execu\u00e7\u00e3o, identificar as causas que levaram o Otimizador a tomar uma decis\u00e3o incorreta e corrigir este problema para melhorar o desempenho da instru\u00e7\u00e3o SQL.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Refer\u00eancias<\/span><\/h2>\n<p><strong><a href=\"http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41573\/optimops.htm#PFGRF94639\" target=\"_blank\">http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41573\/optimops.htm#PFGRF94639<\/a><\/strong><\/p>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n<a href=\"http:\/\/dbtimewizard.com.br\/treinamento\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1255\" src=\"http:\/\/dbtimewizard.com.br\/blog\/wp-content\/uploads\/2018\/10\/promo_cur02.jpg\" alt=\"Promo-D75L\" width=\"330\" height=\"242\" \/><\/a><\/p>\n<p><a href=\"https:\/\/youtu.be\/l6OphhTle9I\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1215\" src=\"http:\/\/dbtimewizard.com.br\/wp-content\/uploads\/2018\/01\/video-02-300x168.jpg\" alt=\"video-02\" width=\"330\" height=\"242\" \/><\/a><br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O NESTED LOOP e o HASH JOIN n\u00e3o s\u00e3o as \u00fanicas op\u00e7\u00f5es utilizadas pelo Otimizador do Oracle para fazer a jun\u00e7\u00e3o de linhas de duas tabelas, mas s\u00e3o as op\u00e7\u00f5es mais utilizadas. Neste artigo vamos explorar um pouco como funcionam essas opera\u00e7\u00f5es e verificar qual delas \u00e9 a melhor op\u00e7\u00e3o para o Otimizador. Vamos come\u00e7ar respondendo a quest\u00e3o que tamb\u00e9m<\/p>\n","protected":false},"author":2,"featured_media":301,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[87],"tags":[65,6,42,36,89,88,82,10,29,11],"class_list":["post-300","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-table-join","tag-ajuste-de-desempenho","tag-cbo","tag-cost-base-optimizer","tag-execution-plan","tag-hash-join","tag-nested-loop","tag-optimizer","tag-otimizador","tag-performance-tuning","tag-plano-de-execucao"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/comments?post=300"}],"version-history":[{"count":17,"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/300\/revisions"}],"predecessor-version":[{"id":2050,"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/300\/revisions\/2050"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media\/301"}],"wp:attachment":[{"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media?parent=300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/categories?post=300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/tags?post=300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}