{"id":575,"date":"2016-04-17T22:24:45","date_gmt":"2016-04-18T01:24:45","guid":{"rendered":"http:\/\/dbtimewizard.com.br\/blog\/?p=575"},"modified":"2019-11-11T18:58:36","modified_gmt":"2019-11-11T21:58:36","slug":"por-que-o-operador-not-equal-prejudica-performance","status":"publish","type":"post","link":"http:\/\/dbtimewizard.com.br\/blog\/por-que-o-operador-not-equal-prejudica-performance\/","title":{"rendered":"Por que o operador NOT EQUAL prejudica performance?"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">As instru\u00e7\u00f5es SQL que utilizam NOT EQUAL na cl\u00e1usula WHERE em base de dados Oracle n\u00e3o utilizam \u00edndice no plano de execu\u00e7\u00e3o para acessar as linhas da tabela, em algumas situa\u00e7\u00f5es essa limita\u00e7\u00e3o do Otimizador pode prejudicar o desempenho das instru\u00e7\u00f5es SQL. Nesse artigo vamos entender porque essa limita\u00e7\u00e3o existe e verificar quais alternativas podemos utilizar em nossa instru\u00e7\u00e3o SQL para evitar que ela prejudique a performance.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Como trabalha o Otimizador<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">O Otimizador (CBO) \u00e9 um c\u00f3digo muito complexo que tem de lidar com in\u00fameros cen\u00e1rios diferentes para determinar o plano de execu\u00e7\u00e3o mais eficiente poss\u00edvel. <\/span><br \/>\n&nbsp;<br \/>\n<span style=\"font-size: 12pt;\">O objetivo principal do Otimizador \u00e9 determinar um plano de execu\u00e7\u00e3o que consiga processar a instru\u00e7\u00e3o SQL o mais r\u00e1pido poss\u00edvel, porem o tempo que ele gasta para determinar esse plano esta incluso no tempo total que a instru\u00e7\u00e3o SQL vai levar para realizar a tarefa solicitada ao Banco de dados, logo esse trabalho tem que ser realizado num intervalo de tempo muito pequeno, caso contr\u00e1rio ele pode ser o respons\u00e1vel pelo tempo insatisfat\u00f3rio para execu\u00e7\u00e3o da instru\u00e7\u00e3o SQL.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Para realizar esta tarefa complexa com extrema precis\u00e3o e rapidez o Otimizador utiliza v\u00e1rios tipos de atalhos e suposi\u00e7\u00f5es. No entanto, esses atalhos \u00e0s vezes podem ser problem\u00e1ticos se n\u00e3o forem reconhecidos e tratados de forma adequada.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Um desses pequenos atalhos digno de nota \u00e9 a forma como o Otimizador trata os operadores NOT EQUAL (e NOT IN).<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Normalmente, quando temos uma situa\u00e7\u00e3o em que dizemos que queremos o que n\u00e3o seja igual a alguma coisa especifica (NOT EQUAL), estamos sugerindo basicamente que estamos interessado em tudo exceto aquela coisa especifica.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Por exemplo quando temos uma condi\u00e7\u00e3o como:<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">WHERE frutas &lt;&gt; &#8216;LARANJA&#8217;<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Essa condi\u00e7\u00e3o nos diz que estamos interessados em todas as frutas existentes na tabela exceto a LARANJA.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Numa situa\u00e7\u00e3o como essa, em que estamos interessados na maioria dos registros de uma tabela, sabemos que o Otimizador do Oracle prefere fazer o acesso a tabela atrav\u00e9s de uma opera\u00e7\u00e3o FULL TABLE SCAN, pois ela \u00e9 mais eficiente do que utilizar um \u00edndice para retornar a maioria dos registros da tabela.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Porem existem situa\u00e7\u00f5es em que utilizamos o operador NOT EQUAL e a quantidade de linhas retornada \u00e9 muito pequena considerando a quantidade total de registros da tabela, nesses casos a utiliza\u00e7\u00e3o de um \u00edndice seria mais eficiente.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Simulando uma consulta com NOT EQUAL<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A seguir vamos criar uma tabela com \u00edndice e coletar as estat\u00edsticas, na sequ\u00eancia fazer uma consulta nesta tabela utilizando o operador NOT EQUAL para verificar se o Otimizador vai utilizar o \u00edndice para acessar a tabela.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Vamos criar uma tabela com 3 valores distintos (P, T e F) sendo que um deles (P) tem uma quantidade de registros muito superior aos outros dois:<\/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 \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <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> 64bit Production<br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> row selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> create table dbtw01 <span class=\"br0\">&#40;<\/span>id <span class=\"sy0\">,<\/span> result<span class=\"sy0\">,<\/span> text <span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp;<span class=\"kw1\">as<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp;select rownum<span class=\"sy0\">,<\/span> decode <span class=\"br0\">&#40;<\/span>mod<span class=\"br0\">&#40;<\/span>rownum<span class=\"sy0\">,<\/span> <span class=\"nu0\">30000<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'F'<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'T'<\/span><span class=\"sy0\">,<\/span> &nbsp;<span class=\"st_h\">'P'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp;from dual connect by level <span class=\"sy0\">&lt;=<\/span> <span class=\"nu0\">100000<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTable created<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> create index dbtw01_idx on dbtw01<span class=\"br0\">&#40;<\/span>result<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nIndex created<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">exec<\/span><\/a> dbms_stats<span class=\"sy0\">.<\/span>gather_table_stats<span class=\"br0\">&#40;<\/span>ownname<span class=\"sy0\">=&gt;<\/span> USER<span class=\"sy0\">,<\/span> tabname<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'DBTW01'<\/span><span class=\"sy0\">,<\/span> cascade<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span> estimate_percent<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">null<\/span><span class=\"sy0\">,<\/span> method_opt<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'FOR ALL COLUMNS SIZE 254'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nPL<span class=\"sy0\">\/<\/span>SQL procedure successfully completed<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT result <span class=\"sy0\">,<\/span> <a href=\"http:\/\/www.php.net\/count\"><span class=\"kw3\">count<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"sy0\">*<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dbtw01<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; GROUP BY result<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nR &nbsp; <a href=\"http:\/\/www.php.net\/count\"><span class=\"kw3\">COUNT<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"sy0\">*<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"sy0\">-<\/span> <span class=\"sy0\">----------<\/span><br \/>\nP &nbsp; &nbsp; &nbsp;<span class=\"nu0\">99993<\/span><br \/>\nT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/span><br \/>\nF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">3<\/span><br \/>\n<br \/>\n<span class=\"nu0\">3<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <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;\">Vamos executar uma consulta onde vamos selecionar todos os registros diferentes de &#8220;P&#8221;:<\/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 \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <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 \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* tst101 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from dbtw01<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where result <span class=\"sy0\">!=<\/span> <span class=\"st_h\">'P'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ID R TEXT<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">-<\/span> <span class=\"sy0\">-------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">7<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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\">'%tst101%'<\/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 \/>\ndqak0zs4mj0w2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> row selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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 \/>\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\">\/* tst101 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; from dbtw01 &nbsp;where result <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\">658621498<\/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; <span class=\"sy0\">|<\/span> Name &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;<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\">7<\/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\">699<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS FULL<span class=\"sy0\">|<\/span> DBTW01 <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">7<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">7<\/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\">699<\/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> filter<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">&lt;&gt;:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">18<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <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;\">Verificamos que apesar da consultar retornar somente 7 linhas o Otimizador escolheu fazer uma opera\u00e7\u00e3o de FULL TABLE SCAN para acessar essas linhas na tabela.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Contornando a limita\u00e7\u00e3o do operador NOT EQUAL<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Agora vamos reescrever a cl\u00e1usula WHERE de outra forma, mas como na consulta anterior, indicando ao Otimizador que queremos valores diferentes de &#8220;P&#8221;:<\/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 \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* tst102 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from dbtw01<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where result <span class=\"sy0\">&gt;<\/span> <span class=\"st_h\">'P'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp;or result <span class=\"sy0\">&lt;<\/span> <span class=\"st_h\">'P'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ID R TEXT<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">-<\/span> <span class=\"sy0\">-------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">7<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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\">'%tst102%'<\/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 \/>\n4uf7c3a4vdmmc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> row selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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 \/>\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\">\/* tst102 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; from dbtw01 &nbsp;where result <span class=\"sy0\">&gt;<\/span> <span class=\"sy0\">:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span> &nbsp; &nbsp; or<br \/>\nresult <span class=\"sy0\">&lt;<\/span> <span class=\"sy0\">:<\/span><span class=\"st0\">&quot;SYS_B_1&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\">3833081860<\/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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> Name &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; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &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\">7<\/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\">12<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;CONCATENATION &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &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\">7<\/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\">12<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> DBTW01 &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/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\">6<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW01_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/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\">3<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> DBTW01 &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/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\">6<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW01_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/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><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\">3<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">&lt;:<\/span>SYS_B_1<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">&gt;:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;filter<span class=\"br0\">&#40;<\/span>LNNVL<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">&lt;:<\/span>SYS_B_1<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">25<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <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;\">Reescrevendo a consulta com os operadores &#8220;&gt;&#8221; &#8220;OR&#8221; &#8220;&lt;&#8221; verificamos que o Otimizador calculou que seria mais eficiente utilizar \u00edndice, nesse caso ele utilizou as estat\u00edsticas\u00a0existentes\u00a0na base\u00a0sobre a tabela pois no c\u00f3digo do Otimizador n\u00e3o existe atalhos para esses tipos de operadores. Se observarmos a quantidade de Buffers lidos na primeira consulta (699) e compararmos com a quantidade de Buffers lidos na\u00a0consulta acima (12), podemos afirmar que essa consulta que utilizou \u00edndice \u00e9 muito mais eficiente que a primeira.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Segunda alternativa ao operador NOT EQUAL<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Outra alternativa para reescrever a cl\u00e1usula WHERE seria utilizar o operador IN ():<\/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 \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* tst103 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from dbtw01<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where result IN <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'F'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'T'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ID R TEXT<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">-<\/span> <span class=\"sy0\">-------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">7<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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\">'%tst103%'<\/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 \/>\nb11d2xwtzxjjw &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> row selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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 \/>\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\">\/* tst103 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; from dbtw01 &nbsp;where result 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=\"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\">2152084041<\/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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> Name &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; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &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\">7<\/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\">12<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;INLIST ITERATOR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &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\">7<\/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\">12<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> DBTW01 &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">6<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">7<\/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\">12<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW01_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">6<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">7<\/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\">5<\/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\">3<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0 OR <span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">21<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <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;\">Verificando o resultado na log acima notamos que o Otimizador utilizou o \u00edndice novamente pois eliminamos a limita\u00e7\u00e3o NOT EQUAL ao reescrever a consulta utilizando o operador IN ().<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Terceira alternativa ao operador NOT EQUAL<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Outra alternativa que temos para reescrever a cl\u00e1usula WHERE seria utilizar o UNION ALL:<\/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 \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* tst104 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from dbtw01<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where result <span class=\"sy0\">&gt;<\/span> <span class=\"st_h\">'P'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp;union all<br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp;select <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp;from dbtw01<br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; where result <span class=\"sy0\">&lt;<\/span> <span class=\"st_h\">'P'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ID R TEXT<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">-<\/span> <span class=\"sy0\">-------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90001<\/span> T DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">30000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">60000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">90000<\/span> F DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">7<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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\">'%tst104%'<\/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 \/>\n3rtvk926fj5zu &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> row selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <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 \/>\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\">\/* tst104 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; from dbtw01 &nbsp;where result <span class=\"sy0\">&gt;<\/span> <span class=\"sy0\">:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span> union<br \/>\nall select <span class=\"sy0\">*<\/span> &nbsp; from dbtw01 &nbsp;where result <span class=\"sy0\">&lt;<\/span> <span class=\"sy0\">:<\/span><span class=\"st0\">&quot;SYS_B_1&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\">2290229173<\/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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> Name &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; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &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\">7<\/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\">12<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;UNION<span class=\"sy0\">-<\/span>ALL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &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\">7<\/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\">12<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> DBTW01 &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/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\">7<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW01_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">4<\/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\">3<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> DBTW01 &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/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\">5<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW01_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/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><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\">3<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">&gt;:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;RESULT&quot;<\/span><span class=\"sy0\">&lt;:<\/span>SYS_B_1<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">24<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <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;\">Novamente vamos obter o mesmo resultado com um plano de execu\u00e7\u00e3o eficiente utilizando o \u00edndice.<\/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;\">Devido a limita\u00e7\u00e3o de tempo para determinar o plano de execu\u00e7\u00e3o de uma instru\u00e7\u00e3o SQL, o Otimizador recorre a algumas regras pr\u00e9-definidas que n\u00e3o s\u00e3o verdadeiras em todas as situa\u00e7\u00f5es, essa limita\u00e7\u00e3o leva o Otimizador em alguns momentos a produzir planos de execu\u00e7\u00e3o ineficientes, conhecer quais s\u00e3o esses atalhos e suposi\u00e7\u00f5es \u00e9 muito importante pois podemos avaliar se eles s\u00e3o validos ou n\u00e3o nas instru\u00e7\u00f5es SQL das aplica\u00e7\u00f5es e quando identificamos que eles n\u00e3o s\u00e3o validos podemos buscar alternativas de c\u00f3digo SQL para contornar essas limita\u00e7\u00f5es.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Refer\u00eancias<\/span><\/h2>\n<p><strong><span style=\"font-size: 12pt;\"><a href=\"http:\/\/richardfoote.wordpress.com\/2008\/08\/13\/indexes-and-not-equal-not-now-john\/\" target=\"_blank\">http:\/\/richardfoote.wordpress.com\/2008\/08\/13\/indexes-and-not-equal-not-now-john\/<\/a><\/span><\/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>As instru\u00e7\u00f5es SQL que utilizam NOT EQUAL na cl\u00e1usula WHERE em base de dados Oracle n\u00e3o utilizam \u00edndice no plano de execu\u00e7\u00e3o para acessar as linhas da tabela, em algumas situa\u00e7\u00f5es essa limita\u00e7\u00e3o do Otimizador pode prejudicar o desempenho das instru\u00e7\u00f5es SQL. Nesse artigo vamos entender porque essa limita\u00e7\u00e3o existe e verificar quais alternativas podemos utilizar em nossa instru\u00e7\u00e3o SQL<\/p>\n","protected":false},"author":2,"featured_media":580,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62],"tags":[65,121,82,10,29,61],"class_list":["post-575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-indice","tag-ajuste-de-desempenho","tag-not-equal","tag-optimizer","tag-otimizador","tag-performance-tuning","tag-tempo-de-reposta"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/comments?post=575"}],"version-history":[{"count":15,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/575\/revisions"}],"predecessor-version":[{"id":2099,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/575\/revisions\/2099"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media\/580"}],"wp:attachment":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media?parent=575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/categories?post=575"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/tags?post=575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}