{"id":289,"date":"2016-02-07T21:53:51","date_gmt":"2016-02-07T23:53:51","guid":{"rendered":"http:\/\/dbtimewizard.com.br\/blog\/?p=289"},"modified":"2019-11-11T19:01:49","modified_gmt":"2019-11-11T22:01:49","slug":"por-que-minha-consulta-nao-esta-usando-o-indice","status":"publish","type":"post","link":"http:\/\/dbtimewizard.com.br\/blog\/por-que-minha-consulta-nao-esta-usando-o-indice\/","title":{"rendered":"Por que minha consulta n\u00e3o esta usando o \u00edndice?"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Existem muitas raz\u00f5es pelas quais o Otimizador do Oracle Database escolhe n\u00e3o utilizar um \u00edndice de uma tabela, algumas s\u00e3o bem conhecidas outras nem tanto, neste artigo vamos analisar uma consulta que aparentemente deveria utilizar um \u00edndice porem o Otimizador resolve fazer um &#8220;FULL TABLE SCAN&#8221; na tabela, esse caso especifico \u00e9 bem comum e muitas vezes perdemos muito tempo para identificar a sua causa.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Nesta consulta tudo parece indicar que a utiliza\u00e7\u00e3o do \u00edndice seria uma boa escolha para o Otimizador, ela possui um filtro na cl\u00e1usula WHERE cuja coluna da tabela possui um \u00edndice, esse por sua vez tem bom valor de &#8220;<strong><a href=\"https:\/\/asktom.oracle.com\/pls\/asktom\/f?p=100:11:0::::P11_QUESTION_ID:2969235095639\" target=\"_blank\">DENSITY<\/a><\/strong>&#8221; pr\u00f3xima de zero (0.001605136), no filtro da consulta n\u00e3o foi especificado uma fun\u00e7\u00e3o, porem o Otimizador escolhe um plano que n\u00e3o utiliza o \u00edndice, o que esta impedindo o Otimizador de utilizar o \u00edndice?<\/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 analisar este caso vamos fazer duas 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>&#8221; para isso vamos criar um \u00edndice que seria utilizado pela consulta, pois originalmente o &#8220;SCHEMA SH&#8221; n\u00e3o possui esse \u00edndice, na primeira simula\u00e7\u00e3o vamos constatar que o Otimizador n\u00e3o vai utilizar o \u00edndice, vamos fazer uma an\u00e1lise do plano e identificar a causa que esta impedindo o Otimizador de utilizar o \u00edndice e na sequ\u00eancia executar a segunda simula\u00e7\u00e3o onde o Otimizador vai utilizar o \u00edndice.<\/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 style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">1. <strong><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><\/strong><\/span><br \/>\n<span style=\"font-size: 12pt;\">2. <strong><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><\/strong><\/span><br \/>\n<span style=\"font-size: 12pt;\">3. <strong><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><\/strong><\/span><br \/>\n<span style=\"font-size: 12pt;\">4. <strong><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><\/strong><\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Criando o \u00edndice<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">O primeiro passo em nossa simula\u00e7\u00e3o \u00e9 a cria\u00e7\u00e3o do \u00edndice da coluna &#8220;CUST_POSTAL_CODE&#8221; na tabela &#8220;CUSTOMERS&#8221; que ser\u00e1 utilizado na consulta.<\/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 \/><\/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> create index CUSTOMERS_POSTAL_CODE_BIX on CUSTOMERS<span class=\"br0\">&#40;<\/span>CUST_POSTAL_CODE<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n\u00edndice criado<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nsh<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> select index_name<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_rows<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; distinct_keys<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; visibility<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; to_char<span class=\"br0\">&#40;<\/span>last_analyzed<span class=\"sy0\">,<\/span> <span class=\"st_h\">' dd\/MON\/yyyy'<\/span><span class=\"br0\">&#41;<\/span> last_analyzed<br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp;from user_indexes<br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; where table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'CUSTOMERS'<\/span><br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; order by <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nINDEX_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NUM_ROWS DISTINCT_KEYS VISIBILIT LAST_ANALYZE<br \/>\n<span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">-------------<\/span> <span class=\"sy0\">---------<\/span> <span class=\"sy0\">------------<\/span><br \/>\nCUSTOMERS_GENDER_BIX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">2<\/span> VISIBLE &nbsp; &nbsp;<span class=\"nu0\">25<\/span><span class=\"sy0\">\/<\/span>AGO<span class=\"sy0\">\/<\/span><span class=\"nu0\">2013<\/span><br \/>\nCUSTOMERS_MARITAL_BIX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">18<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">11<\/span> VISIBLE &nbsp; &nbsp;<span class=\"nu0\">25<\/span><span class=\"sy0\">\/<\/span>AGO<span class=\"sy0\">\/<\/span><span class=\"nu0\">2013<\/span><br \/>\nCUSTOMERS_PK &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">55500<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">55500<\/span> VISIBLE &nbsp; &nbsp;<span class=\"nu0\">25<\/span><span class=\"sy0\">\/<\/span>AGO<span class=\"sy0\">\/<\/span><span class=\"nu0\">2013<\/span><br \/>\nCUSTOMERS_POSTAL_CODE_BIX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">55500<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">623<\/span> VISIBLE &nbsp; &nbsp;<span class=\"nu8\">02<\/span><span class=\"sy0\">\/<\/span>FEV<span class=\"sy0\">\/<\/span><span class=\"nu0\">2016<\/span><br \/>\nCUSTOMERS_YOB_BIX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">75<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">75<\/span> VISIBLE &nbsp; &nbsp;<span class=\"nu0\">25<\/span><span class=\"sy0\">\/<\/span>AGO<span class=\"sy0\">\/<\/span><span class=\"nu0\">2013<\/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;\">Consulta que n\u00e3o utiliza o \u00edndice<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Agora vamos executar a nossa consulta que supostamente deveria utilizar o \u00edndice criado, mas que por algum motivo n\u00e3o vai utiliza-lo.<\/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 \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/><\/div><\/td><td><div class=\"php codecolorer\">sh<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 \/>\nSess\u00e3o alterada<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> VARIABLE SYS_B_1 &nbsp; &nbsp; number<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> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">EXEC<\/span><\/a> &nbsp; &nbsp;<span class=\"sy0\">:<\/span>SYS_B_1 &nbsp; &nbsp; <span class=\"sy0\">:=<\/span> <span class=\"nu0\">59411<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nProcedimento PL<span class=\"sy0\">\/<\/span>SQL conclu\u00ed<span class=\"kw1\">do<\/span> com sucesso<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> select <span class=\"coMULTI\">\/* tst101 *\/<\/span> CUST_ID<span class=\"sy0\">,<\/span> CUST_FIRST_NAME<span class=\"sy0\">,<\/span> CUST_LAST_NAME<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from customers<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where CUST_POSTAL_CODE <span class=\"sy0\">=<\/span> <span class=\"sy0\">:<\/span>SYS_B_1<span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;CUST_ID CUST_FIRST_NAME &nbsp; &nbsp; &nbsp;CUST_LAST_NAME<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------<\/span> <span class=\"sy0\">----------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">44116<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Robbinette<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">44117<\/span> Abraham &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Sadworth<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49102<\/span> Bailey &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thompson<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49147<\/span> Barnaby &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Malone<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49114<\/span> Baird &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Rogers<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49125<\/span> Baldwin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ball<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49136<\/span> Barlow &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Charron<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; <span class=\"nu0\">103296<\/span> Trinity &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Moy<br \/>\n<br \/>\n<span class=\"nu0\">320<\/span> linhas selecionadas<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\">'%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 \/>\n488qzbmpb9c1v &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><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 \/>\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> CUST_ID<span class=\"sy0\">,<\/span> CUST_FIRST_NAME<span class=\"sy0\">,<\/span> CUST_LAST_NAME &nbsp; from<br \/>\ncustomers &nbsp;where CUST_POSTAL_CODE <span class=\"sy0\">=<\/span> <span class=\"sy0\">:<\/span>SYS_B_1<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\">2008213504<\/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; &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> Reads &nbsp;<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; <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\">320<\/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.02<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">1478<\/span> <span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1454<\/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> CUSTOMERS <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;<span class=\"nu0\">320<\/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.02<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">1478<\/span> <span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1454<\/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>TO_NUMBER<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CUST_POSTAL_CODE&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">19<\/span> linhas selecionadas<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> <span class=\"sy0\">@<\/span>desc CUSTOMERS<br \/>\n&nbsp;Nome &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Nulo? &nbsp; &nbsp;Tipo<br \/>\n&nbsp;<span class=\"sy0\">-----------------------------------<\/span> <span class=\"sy0\">--------<\/span> <span class=\"sy0\">------------------------<\/span><br \/>\n&nbsp;CUST_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOT <span class=\"kw4\">NULL<\/span> NUMBER<br \/>\n&nbsp;CUST_FIRST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">40<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_GENDER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOT <span class=\"kw4\">NULL<\/span> CHAR<span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_YEAR_OF_BIRTH &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> NUMBER<span class=\"br0\">&#40;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_MARITAL_STATUS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_STREET_ADDRESS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">40<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_POSTAL_CODE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_CITY &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_CITY_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> NUMBER<br \/>\n&nbsp;CUST_STATE_PROVINCE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">40<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_STATE_PROVINCE_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> NUMBER<br \/>\n&nbsp;COUNTRY_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> NUMBER<br \/>\n&nbsp;CUST_MAIN_PHONE_NUMBER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">25<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_INCOME_LEVEL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_CREDIT_LIMIT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NUMBER<br \/>\n&nbsp;CUST_EMAIL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_TOTAL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NOT <span class=\"kw4\">NULL<\/span> VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">14<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;CUST_TOTAL_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NOT <span class=\"kw4\">NULL<\/span> NUMBER<br \/>\n&nbsp;CUST_SRC_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NUMBER<br \/>\n&nbsp;CUST_EFF_FROM &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/date\"><span class=\"kw3\">DATE<\/span><\/a><br \/>\n&nbsp;CUST_EFF_TO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/date\"><span class=\"kw3\">DATE<\/span><\/a><br \/>\n&nbsp;CUST_VALID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/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;\">Verificando o plano de execu\u00e7\u00e3o acima, observamos que o Otimizador utilizou a opera\u00e7\u00e3o &#8220;TABLE ACCESS FULL&#8221; para acessar os registros da tabela &#8220;CUSTOMERS&#8221;, logo abaixo temos a se\u00e7\u00e3o &#8220;Predicate Information&#8221;, nela podemos observar que o Otimizador utilizou implicitamente a fun\u00e7\u00e3o &#8220;TO_NUMBER&#8221; para filtra os registros.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Por que o Otimizador utilizou a fun\u00e7\u00e3o &#8220;TO_NUMBER&#8221; na coluna &#8220;CUST_POSTAL_CODE&#8221; inviabilizando a utiliza\u00e7\u00e3o do \u00edndice?<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A resposta est\u00e1 na defini\u00e7\u00e3o da bind variable &#8220;:SYS_B_1&#8221; no inicio da simula\u00e7\u00e3o, a defini\u00e7\u00e3o dessa vari\u00e1vel \u00e9 num\u00e9rica, porem se verificarmos na descri\u00e7\u00e3o dos tipos de colunas da tabela, a coluna &#8220;CUST_POSTAL_CODE&#8221; \u00e9 um &#8220;VARCHAR2(10)&#8221;, portanto para manter a compatibilidade de tipo na compara\u00e7\u00e3o da igualdade o Otimizador utilizou a fun\u00e7\u00e3o &#8220;TO_NUMBER&#8221; para converter o conteudo da coluna &#8220;CUST_POSTAL_CODE&#8221; para num\u00e9rico o que permitir\u00e1 a compara\u00e7\u00e3o com a &#8220;bind variable&#8221; que tamb\u00e9m \u00e9 num\u00e9rica.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Consulta que utiliza o \u00edndice<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Na sequ\u00eancia vamos executar a consulta novamente s\u00f3 que desta vez vamos alterar a &#8220;bind variable&#8221; para o tipo &#8220;VARCHAR2&#8221; que \u00e9 o mesmo tipo da coluna &#8220;CUST_POSTAL_CODE&#8221; na tabela &#8220;CUSTOMERS&#8221; e verificar se o Otimizador vai alterar o plano de execu\u00e7\u00e3o para utilizar o \u00edndice criado.<\/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 \/><\/div><\/td><td><div class=\"php codecolorer\">sh<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 \/>\nSess\u00e3o alterada<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> VARIABLE SYS_B_1 &nbsp; &nbsp; varchar2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">5<\/span><span class=\"br0\">&#41;<\/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> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">EXEC<\/span><\/a> &nbsp; &nbsp;<span class=\"sy0\">:<\/span>SYS_B_1 &nbsp; &nbsp; <span class=\"sy0\">:=<\/span> <span class=\"st_h\">'59411'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nProcedimento PL<span class=\"sy0\">\/<\/span>SQL conclu\u00ed<span class=\"kw1\">do<\/span> com sucesso<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><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=\"coMULTI\">\/* tst102 *\/<\/span> CUST_ID<span class=\"sy0\">,<\/span> CUST_FIRST_NAME<span class=\"sy0\">,<\/span> CUST_LAST_NAME<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from customers<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where CUST_POSTAL_CODE <span class=\"sy0\">=<\/span> <span class=\"sy0\">:<\/span>SYS_B_1<span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;CUST_ID CUST_FIRST_NAME &nbsp; &nbsp; &nbsp;CUST_LAST_NAME<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------<\/span> <span class=\"sy0\">----------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">44116<\/span> Abner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Robbinette<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">44117<\/span> Abraham &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Sadworth<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49102<\/span> Bailey &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thompson<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49147<\/span> Barnaby &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Malone<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49114<\/span> Baird &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Rogers<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">49125<\/span> Baldwin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ball<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; <span class=\"nu0\">103296<\/span> Trinity &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Moy<br \/>\n<br \/>\n<span class=\"nu0\">320<\/span> linhas selecionadas<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\">'%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 \/>\ndz494vttb896c &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><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 \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nEXPLAINED SQL STATEMENT<span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">------------------------<\/span><br \/>\nselect <span class=\"coMULTI\">\/* tst102 *\/<\/span> CUST_ID<span class=\"sy0\">,<\/span> CUST_FIRST_NAME<span class=\"sy0\">,<\/span> CUST_LAST_NAME &nbsp; from<br \/>\ncustomers &nbsp;where CUST_POSTAL_CODE <span class=\"sy0\">=<\/span> <span class=\"sy0\">:<\/span>SYS_B_1<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\">1026787069<\/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; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &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> Reads &nbsp;<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; &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\">320<\/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\">328<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">653<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> CUSTOMERS &nbsp; &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\">89<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">320<\/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\">328<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">653<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &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> CUSTOMERS_POSTAL_CODE_BIX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">89<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">320<\/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\">25<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">7<\/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;CUST_POSTAL_CODE&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">20<\/span> linhas selecionadas<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;\">Analisando o plano de execu\u00e7\u00e3o acima observamos que o \u00edndice &#8220;CUSTOMERS_POSTAL_CODE_BIX&#8221; foi utilizado e como resultado tivemos uma melhoria de desempenho da ordem de 78% (Redu\u00e7\u00e3o de leitura de Buffers de 1478 para 328), na se\u00e7\u00e3o &#8220;Predicate Information&#8221; verificamos que o Otimizador n\u00e3o utiliza fun\u00e7\u00e3o para convers\u00e3o de tipo de dados pois a &#8220;bind variable&#8221; informada \u00e9 do mesmo tipo que a coluna no filtro da cl\u00e1usula WHERE.<\/span><\/p>\n<p>&nbsp;<\/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;\">Apesar de toda a evolu\u00e7\u00e3o do Otimizador do banco de dados Oracle (CBO), existem situa\u00e7\u00f5es em que ele consegue evitar que uma instru\u00e7\u00e3o SQL apresente um erro, mas n\u00e3o \u00e9 capaz de criar um plano de execu\u00e7\u00e3o com bom desempenho. No nosso exemplo simulamos uma situa\u00e7\u00e3o em que a aplica\u00e7\u00e3o estava passando para a consulta um tipo de dado incompat\u00edvel com o tipo de dado na coluna da tabela e para resolver o problema simplesmente alteramos o tipo de dado enviado pela aplica\u00e7\u00e3o, mas essa solu\u00e7\u00e3o nem sempre \u00e9 vi\u00e1vel pois as vezes a aplica\u00e7\u00e3o pertence a terceiros e sua corre\u00e7\u00e3o pode levar meses ou anos, nesse caso uma alternativa seria criar um &#8220;function-based index&#8221;.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Refer\u00eancias<\/span><\/h2>\n<p><strong><a href=\"http:\/\/intermediatesql.com\/oracle\/how-oracle-implicit-type-conversion-works-part-1\/\" target=\"_blank\">http:\/\/intermediatesql.com\/oracle\/how-oracle-implicit-type-conversion-works-part-1\/<\/a><\/strong><\/p>\n<p><strong><a href=\"http:\/\/intermediatesql.com\/oracle\/how-oracle-implicit-type-conversion-works-part-2\/\" target=\"_blank\">http:\/\/intermediatesql.com\/oracle\/how-oracle-implicit-type-conversion-works-part-2\/<\/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>Existem muitas raz\u00f5es pelas quais o Otimizador do Oracle Database escolhe n\u00e3o utilizar um \u00edndice de uma tabela, algumas s\u00e3o bem conhecidas outras nem tanto, neste artigo vamos analisar uma consulta que aparentemente deveria utilizar um \u00edndice porem o Otimizador resolve fazer um &#8220;FULL TABLE SCAN&#8221; na tabela, esse caso especifico \u00e9 bem comum e muitas vezes perdemos muito tempo<\/p>\n","protected":false},"author":2,"featured_media":290,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,62],"tags":[65,6,42,84,36,85,86,82,10,29,11,83,45,61],"class_list":["post-289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-execution-plan","category-indice","tag-ajuste-de-desempenho","tag-cbo","tag-cost-base-optimizer","tag-density","tag-execution-plan","tag-index-b-tree","tag-indice-b-tree","tag-optimizer","tag-otimizador","tag-performance-tuning","tag-plano-de-execucao","tag-response-time","tag-sql-statement-analysis","tag-tempo-de-reposta"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/289","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=289"}],"version-history":[{"count":14,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/289\/revisions"}],"predecessor-version":[{"id":2105,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/289\/revisions\/2105"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media\/290"}],"wp:attachment":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media?parent=289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/categories?post=289"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/tags?post=289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}