{"id":11443,"date":"2022-01-14T20:32:55","date_gmt":"2022-01-14T19:32:55","guid":{"rendered":"https:\/\/www.salvis.com\/blog\/?p=11443"},"modified":"2023-11-08T16:36:24","modified_gmt":"2023-11-08T15:36:24","slug":"finding-wrong-hints","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/","title":{"rendered":"Finding Wrong Hints"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>I have used the Oracle Database for many years. And I use hints. For experiments, but also in production code. There are cases when you know more than the Oracle Database. For example about the cardinality of a data source or the number of result rows to process or the number of expected executions of a statement. Hints are a way to provide additional information, limit the solution space and enable the database to do a better job. That&#8217;s a good thing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hints Are Instructions<\/h2>\n\n\n\n<p>Hints are passed as special comments at a certain position in SQL statements. They are comments, but they are also instructions. They have to be followed. However, there are cases when hints are not applicable. For example when you request the optimizer to use an index when there is no index defined for the underlying table. In such a case the Oracle Database has basically two options. Either throw an error or ignore the invalid instruction and find another solution. The Oracle Database does the latter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hint Report<\/h2>\n\n\n\n<p>Starting with version 19c you can produce a hint report that reveals unused hints. Here&#8217;s an example:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Unused hint<\/span><span role=\"button\" tabindex=\"0\" data-code=\"create table t (c1 integer, c2 varchar2(20));\ninsert into t values (1, 'one');\ninsert into t values (2, 'two');\nselect \/*+ index(t) *\/ * from t where c1 &gt; 0;\nselect * from dbms_xplan.display_cursor(format =&gt; 'basic +hint_report');\n\nEXPLAINED SQL STATEMENT:\n------------------------\nselect \/*+ index(t) *\/ * from t where c1 &gt; 0\n \nPlan hash value: 1601196873\n \n------------------------------------------\n| Id  | Operation                 | Name |\n------------------------------------------\n|   0 | SELECT STATEMENT          |      |\n|   1 |  TABLE ACCESS STORAGE FULL| T    |\n------------------------------------------\n \nHint Report (identified by operation id \/ Query Block Name \/ Object Alias):\nTotal hints for statement: 1 (U - Unused (1))\n---------------------------------------------------------------------------\n \n   1 -  SEL$1 \/ &quot;T&quot;@&quot;SEL$1&quot;\n         U -  index(t)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">t<\/span><span style=\"color: #D4D4D4\"> (c1 <\/span><span style=\"color: #569CD6\">integer<\/span><span style=\"color: #D4D4D4\">, c2 <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert into<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;one&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert into<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;two&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dbms_xplan.display_cursor(format =&gt; <\/span><span style=\"color: #CE9178\">&#39;basic +hint_report&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">EXPLAINED <\/span><span style=\"color: #569CD6\">SQL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Plan <\/span><span style=\"color: #569CD6\">hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">value<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">1601196873<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                 | <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">          |      |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> |  <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS STORAGE FULL| T    |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Hint Report (identified <\/span><span style=\"color: #569CD6\">by<\/span><span style=\"color: #D4D4D4\"> operation id \/ Query <\/span><span style=\"color: #569CD6\">Block<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #569CD6\">Object<\/span><span style=\"color: #D4D4D4\"> Alias):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Total hints <\/span><span style=\"color: #569CD6\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">statement<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> (U - Unused (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">---------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> -  SEL$<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #CE9178\">&quot;T&quot;<\/span><span style=\"color: #D4D4D4\">@<\/span><span style=\"color: #CE9178\">&quot;SEL$1&quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         U -  <\/span><span style=\"color: #569CD6\">index<\/span><span style=\"color: #D4D4D4\">(t)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The hint <code>index(t)<\/code> defined on line 4 is valid, but it&#8217;s reported as unused on line 25. No wonder. There is no index defined on table <code>t<\/code>.<\/p>\n\n\n\n<p>Let&#8217;s create an index and rerun the query.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Used hint<\/span><span role=\"button\" tabindex=\"0\" data-code=\"create unique index t_c1_i on t(c1);\nselect \/*+ index(t) *\/ * from t where c1 &gt; 0;\nselect * from dbms_xplan.display_cursor(format =&gt; 'basic +hint_report');\n\nEXPLAINED SQL STATEMENT:\n------------------------\nselect \/*+ index(t) *\/ * from t where c1 &gt; 0\n \nPlan hash value: 2704710798\n \n------------------------------------------------------\n| Id  | Operation                           | Name   |\n------------------------------------------------------\n|   0 | SELECT STATEMENT                    |        |\n|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T      |\n|   2 |   INDEX RANGE SCAN                  | T_C1_I |\n------------------------------------------------------\n \nHint Report (identified by operation id \/ Query Block Name \/ Object Alias):\nTotal hints for statement: 1\n---------------------------------------------------------------------------\n \n   1 -  SEL$1 \/ &quot;T&quot;@&quot;SEL$1&quot;\n           -  index(t)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">unique index<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">t_c1_i<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> t(c1);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dbms_xplan.display_cursor(format =&gt; <\/span><span style=\"color: #CE9178\">&#39;basic +hint_report&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">EXPLAINED <\/span><span style=\"color: #569CD6\">SQL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Plan <\/span><span style=\"color: #569CD6\">hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">value<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">2704710798<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                           | <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\">   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">                    |        |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> |  <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS <\/span><span style=\"color: #569CD6\">BY<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> ROWID BATCHED| T      |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> |   <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">RANGE<\/span><span style=\"color: #D4D4D4\"> SCAN                  | T_C1_I |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Hint Report (identified <\/span><span style=\"color: #569CD6\">by<\/span><span style=\"color: #D4D4D4\"> operation id \/ Query <\/span><span style=\"color: #569CD6\">Block<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #569CD6\">Object<\/span><span style=\"color: #D4D4D4\"> Alias):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Total hints <\/span><span style=\"color: #569CD6\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">statement<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">---------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> -  SEL$<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #CE9178\">&quot;T&quot;<\/span><span style=\"color: #D4D4D4\">@<\/span><span style=\"color: #CE9178\">&quot;SEL$1&quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">           -  <\/span><span style=\"color: #569CD6\">index<\/span><span style=\"color: #D4D4D4\">(t)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Now the hint <code>index(t)<\/code> defined on line 2 is reported as used on line 24.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mixing Hints and Comments<\/h2>\n\n\n\n<p>What happens if we mix hints and comments? It depends on where you place the comment. Let&#8217;s look at the next example.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Hint followed by unknown tokens<\/span><span role=\"button\" tabindex=\"0\" data-code=\"select \/*+ index(t) forcing unnecessary index access *\/ * from t where c1 &gt; 0;\nselect * from dbms_xplan.display_cursor(format =&gt; 'basic +hint_report');\n\nEXPLAINED SQL STATEMENT:\n------------------------\nselect \/*+ index(t) forcing unnecessary index access *\/ * from t where \nc1 &gt; 0\n \nPlan hash value: 2704710798\n \n------------------------------------------------------\n| Id  | Operation                           | Name   |\n------------------------------------------------------\n|   0 | SELECT STATEMENT                    |        |\n|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T      |\n|   2 |   INDEX RANGE SCAN                  | T_C1_I |\n------------------------------------------------------\n \nHint Report (identified by operation id \/ Query Block Name \/ Object Alias):\nTotal hints for statement: 4 (E - Syntax error (3))\n---------------------------------------------------------------------------\n \n   1 -  SEL$1\n         E -  forcing\n         E -  index \n         E -  unnecessary\n \n   1 -  SEL$1 \/ &quot;T&quot;@&quot;SEL$1&quot;\n           -  index(t)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) forcing unnecessary index access *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dbms_xplan.display_cursor(format =&gt; <\/span><span style=\"color: #CE9178\">&#39;basic +hint_report&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">EXPLAINED <\/span><span style=\"color: #569CD6\">SQL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) forcing unnecessary index access *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Plan <\/span><span style=\"color: #569CD6\">hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">value<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">2704710798<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                           | <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\">   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">                    |        |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> |  <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS <\/span><span style=\"color: #569CD6\">BY<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> ROWID BATCHED| T      |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> |   <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">RANGE<\/span><span style=\"color: #D4D4D4\"> SCAN                  | T_C1_I |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Hint Report (identified <\/span><span style=\"color: #569CD6\">by<\/span><span style=\"color: #D4D4D4\"> operation id \/ Query <\/span><span style=\"color: #569CD6\">Block<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #569CD6\">Object<\/span><span style=\"color: #D4D4D4\"> Alias):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Total hints <\/span><span style=\"color: #569CD6\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">statement<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\"> (E - Syntax error (<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">---------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> -  SEL$<\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         E -  forcing<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         E -  <\/span><span style=\"color: #569CD6\">index<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         E -  unnecessary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> -  SEL$<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #CE9178\">&quot;T&quot;<\/span><span style=\"color: #D4D4D4\">@<\/span><span style=\"color: #CE9178\">&quot;SEL$1&quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">           -  <\/span><span style=\"color: #569CD6\">index<\/span><span style=\"color: #D4D4D4\">(t)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The comment <code>forcing unnecessary index access<\/code> on line 1 is interpreted as a series of hints and reported as errors on lines 24 to 26. The token <code>access<\/code> was not reported. However, the hint <code>index(t)<\/code> was reported as used on line 29.<\/p>\n\n\n\n<p>What happens if we move the comment to the beginning?<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Unknown tokens followed by hint<\/span><span role=\"button\" tabindex=\"0\" data-code=\"select \/*+ forcing unnecessary index access index(t) *\/ * from t where c1 &gt; 0;\nselect * from dbms_xplan.display_cursor(format =&gt; 'basic +hint_report');\n\nEXPLAINED SQL STATEMENT:\n------------------------\nselect \/*+ forcing unnecessary index access index(t) *\/ * from t where \nc1 &gt; 0\n \nPlan hash value: 2704710798\n \n------------------------------------------------------\n| Id  | Operation                           | Name   |\n------------------------------------------------------\n|   0 | SELECT STATEMENT                    |        |\n|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T      |\n|   2 |   INDEX RANGE SCAN                  | T_C1_I |\n------------------------------------------------------\n \nHint Report (identified by operation id \/ Query Block Name \/ Object Alias):\nTotal hints for statement: 3 (E - Syntax error (3))\n---------------------------------------------------------------------------\n \n   1 -  SEL$1\n         E -  forcing\n         E -  index \n         E -  unnecessary\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ forcing unnecessary index access index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dbms_xplan.display_cursor(format =&gt; <\/span><span style=\"color: #CE9178\">&#39;basic +hint_report&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">EXPLAINED <\/span><span style=\"color: #569CD6\">SQL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ forcing unnecessary index access index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Plan <\/span><span style=\"color: #569CD6\">hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">value<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">2704710798<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                           | <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\">   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">                    |        |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> |  <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS <\/span><span style=\"color: #569CD6\">BY<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> ROWID BATCHED| T      |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> |   <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">RANGE<\/span><span style=\"color: #D4D4D4\"> SCAN                  | T_C1_I |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Hint Report (identified <\/span><span style=\"color: #569CD6\">by<\/span><span style=\"color: #D4D4D4\"> operation id \/ Query <\/span><span style=\"color: #569CD6\">Block<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #569CD6\">Object<\/span><span style=\"color: #D4D4D4\"> Alias):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Total hints <\/span><span style=\"color: #569CD6\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">statement<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> (E - Syntax error (<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">---------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> -  SEL$<\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         E -  forcing<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         E -  <\/span><span style=\"color: #569CD6\">index<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         E -  unnecessary<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The same invalid hints are reported as before on lines 24 to 26. However, the hint <code>index(t)<\/code> was used but not reported as such. This seems to be a limitation of the current hint report in the Oracle Database 21c.<\/p>\n\n\n\n<p>Anyways, it clearly shows that you should not mix comments and hints. Instead, you should write it like this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Distinguish between comments and hints<\/span><span role=\"button\" tabindex=\"0\" data-code=\"select \/* forcing unnecessary index access *\/ \/*+ index(t) *\/ * from t where c1 &gt; 0;\nselect * from dbms_xplan.display_cursor(format =&gt; 'basic +hint_report');\n\nEXPLAINED SQL STATEMENT:\n------------------------\nselect \/* forcing unnecessary index access *\/ \/*+ index(t) *\/ * from t \nwhere c1 &gt; 0\n \nPlan hash value: 2704710798\n \n------------------------------------------------------\n| Id  | Operation                           | Name   |\n------------------------------------------------------\n|   0 | SELECT STATEMENT                    |        |\n|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T      |\n|   2 |   INDEX RANGE SCAN                  | T_C1_I |\n------------------------------------------------------\n \nHint Report (identified by operation id \/ Query Block Name \/ Object Alias):\nTotal hints for statement: 1\n---------------------------------------------------------------------------\n \n   1 -  SEL$1 \/ &quot;T&quot;@&quot;SEL$1&quot;\n           -  index(t)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/* forcing unnecessary index access *\/<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dbms_xplan.display_cursor(format =&gt; <\/span><span style=\"color: #CE9178\">&#39;basic +hint_report&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">EXPLAINED <\/span><span style=\"color: #569CD6\">SQL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/* forcing unnecessary index access *\/<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ index(t) *\/<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1 &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Plan <\/span><span style=\"color: #569CD6\">hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">value<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">2704710798<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                           | <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\">   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">                    |        |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> |  <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS <\/span><span style=\"color: #569CD6\">BY<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> ROWID BATCHED| T      |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> |   <\/span><span style=\"color: #569CD6\">INDEX<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">RANGE<\/span><span style=\"color: #D4D4D4\"> SCAN                  | T_C1_I |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Hint Report (identified <\/span><span style=\"color: #569CD6\">by<\/span><span style=\"color: #D4D4D4\"> operation id \/ Query <\/span><span style=\"color: #569CD6\">Block<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #569CD6\">Object<\/span><span style=\"color: #D4D4D4\"> Alias):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Total hints <\/span><span style=\"color: #569CD6\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">statement<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">---------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> -  SEL$<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #CE9178\">&quot;T&quot;<\/span><span style=\"color: #D4D4D4\">@<\/span><span style=\"color: #CE9178\">&quot;SEL$1&quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">           -  <\/span><span style=\"color: #569CD6\">index<\/span><span style=\"color: #D4D4D4\">(t)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Now the hint <code>index(t)<\/code> is reported as used. All good, right?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Problem<\/h2>\n\n\n\n<p>I like statically-type languages. Mainly because errors are reported at compile time whenever possible. However, to check hints I need to produce an explain plan. This is possible for a single statement only. This is cumbersome especially when you write code in PL\/SQL. As far as I know, there is no option to produce a compile error for invalid hints.<\/p>\n\n\n\n<p>I recently reviewed a system and found a lot of invalid hints. Here are some real-life hints copied from a production code base:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/*+ parallel 4 *\/<\/code><\/li>\n\n\n\n<li><code>\/*+ no_xml_query_rewrite +materialize *\/<\/code><\/li>\n\n\n\n<li><code>\/*+ materialized *\/<\/code><\/li>\n\n\n\n<li><code>\/*+ first rows cardinality (a,10) *\/<\/code><\/li>\n\n\n\n<li><code>\/*+ append nologging *\/<\/code><\/li>\n\n\n\n<li><code>\/*+ le ading(g) u se_nl(g) u se_hash(p, b) *\/<\/code><\/li>\n<\/ul>\n\n\n\n<p>The last example is a kind of commented-out hint series. In this case, it&#8217;s clearly commented-out code. But if you see just a single hint like <code>\/*+ le ading(g) *\/<\/code> in the code, you do not know if the space after <code>le<\/code> was entered intentionally or by accident.<\/p>\n\n\n\n<p>So, how can we identify invalid hints in our code?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 &#8211; Distinguish Between Comments and Hints<\/h2>\n\n\n\n<p>We can configure Oracle&#8217;s SQL Developer to show hints in a different colour than comments. Here&#8217;s the screenshot of an example I showed above:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints.png\"><img loading=\"lazy\" decoding=\"async\" width=\"2170\" height=\"70\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints.png\" alt=\"Distinguish between comments and hints\" class=\"wp-image-11455\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints.png 2170w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-300x10.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-1024x33.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-768x25.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-1536x50.png 1536w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-2048x66.png 2048w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-260x8.png 260w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-50x2.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/distinguish-between-comments-and-hints-150x5.png 150w\" sizes=\"auto, (max-width:767px) 480px, (max-width:2170px) 100vw, 2170px\" \/><\/a><\/figure>\n\n\n\n<p>Go to <a href=\"https:\/\/github.com\/Trivadis\/plsql-syntax-colors#installation\">this GitHub repository<\/a> and follow the instructions to configure your SQL Developer installation accordingly. See also <a href=\"https:\/\/www.salvis.com\/blog\/2020\/09\/07\/highlight-hints-in-sql-developer\/\">this blog post<\/a> for more information about the Arbori code that makes such code highlighting possible.<\/p>\n\n\n\n<p>This step make hints stand out in your code. However, it does not reveal invalid hints.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 &#8211; Install db* CODECOP for SQL Developer<\/h2>\n\n\n\n<p>To reveal invalid hints we need a linter. A tool that does some static code analysis. db* CODECOP is such a tool suite. The SQL Developer extension is available for free. It checks the editor content for violations of the <a href=\"https:\/\/trivadis.github.io\/plsql-and-sql-coding-guidelines\" rel=\"nofollow\">Trivadis PL\/SQL &amp; SQL Coding Guidelines<\/a>. Furthermore, db* CODECOP allows you to implement custom guideline checks. The <a href=\"https:\/\/github.com\/Trivadis\/plsql-cop-validators#hint\">example GitHub repository<\/a> provides the following four guideline checks regarding hints:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>G-9600: Never define more than one comment with hints.<\/li>\n\n\n\n<li>G-9601: Never use unknown hints.<\/li>\n\n\n\n<li>G-9602: Always use the alias name instead of the table name.<\/li>\n\n\n\n<li>G-9603: Never reference an unknown table\/alias.<\/li>\n<\/ul>\n\n\n\n<p>To install db* CODECOP and these additional custom guideline checks follow the instructions in this <a href=\"https:\/\/github.com\/Trivadis\/plsql-cop-validators#use-in-db-codecop-for-sql-developer\">GitHub repository<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Finding Wrong Hints With db* CODECOP<\/h2>\n\n\n\n<p>I asked my followers on <a href=\"https:\/\/twitter.com\/phsalvisberg\/status\/1481641087164846085?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1481641087164846085%7Ctwgr%5E%7Ctwcon%5Es1_c10&amp;ref_url=https%3A%2F%2Fpublish.twitter.com%2F%3Fquery%3Dhttps3A2F2Ftwitter.com2Fphsalvisberg2Fstatus2F1481641087164846085widget%3DTweet\">Twitter<\/a> if this hint is valid:<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"742\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll.png\" alt=\"Twitter Poll\" class=\"wp-image-11459\" style=\"width:600px\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll.png 1200w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll-300x186.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll-1024x633.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll-768x475.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll-236x146.png 236w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll-50x31.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll-121x75.png 121w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/twitter-poll-1x1.png 1w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<p>The result is not really representative. However, 25% thought that <code>\/*+ +materialize *\/<\/code> is a valid hint.<\/p>\n\n\n\n<p>Checking the code with db* CODECOP reveals that the hint is invalid and the majority of the poll participants were right.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1168\" height=\"476\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint.png\" alt=\"Invalid hint\" class=\"wp-image-11457\" style=\"width:584px\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint.png 1168w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint-300x122.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint-1024x417.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint-768x313.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint-260x106.png 260w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint-50x20.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/invalid-hint-150x61.png 150w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1168px) 100vw, 1168px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Verify Result<\/h2>\n\n\n\n<p>But is the result of db* CODECOP correct? The following explain plan shows that the hint <code>\/*+ +materialize *\/<\/code> is not reported at all. It&#8217;s treated as a comment. Another example is where the hint report is incomplete.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Hint report for +materialize<\/span><span role=\"button\" tabindex=\"0\" data-code=\"with e as (\n   select \/*+ +materialize *\/ *\n     from emp\n    where deptno = 10\n)\nselect *\n  from e;\nselect * from dbms_xplan.display_cursor(format =&gt; 'basic +hint_report');\n\nEXPLAINED SQL STATEMENT:\n------------------------\nwith e as (    select \/*+ +materialize *\/ *      from emp     where \ndeptno = 10 ) select *   from e\n \nPlan hash value: 3956160932\n \n------------------------------------------\n| Id  | Operation                 | Name |\n------------------------------------------\n|   0 | SELECT STATEMENT          |      |\n|   1 |  TABLE ACCESS STORAGE FULL| EMP  |\n------------------------------------------\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">with<\/span><span style=\"color: #D4D4D4\"> e <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ +materialize *\/<\/span><span style=\"color: #D4D4D4\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> deptno = <\/span><span style=\"color: #B5CEA8\">10<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dbms_xplan.display_cursor(format =&gt; <\/span><span style=\"color: #CE9178\">&#39;basic +hint_report&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">EXPLAINED <\/span><span style=\"color: #569CD6\">SQL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">with<\/span><span style=\"color: #D4D4D4\"> e <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> (    <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ +materialize *\/<\/span><span style=\"color: #D4D4D4\"> *      <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp     <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">deptno = <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\"> ) <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> *   <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Plan <\/span><span style=\"color: #569CD6\">hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">value<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">3956160932<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                 | <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">          |      |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> |  <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS STORAGE FULL| EMP  |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------------------------<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Let&#8217;s run the same query after removing the extra <code>+<\/code> in the hint:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Hint report for materialize<\/span><span role=\"button\" tabindex=\"0\" data-code=\"with e as (\n   select \/*+ materialize *\/ *\n     from emp\n    where deptno = 10\n)\nselect *\n  from e;\nselect * from dbms_xplan.display_cursor(format =&gt; 'basic +hint_report');\n\nEXPLAINED SQL STATEMENT:\n------------------------\nwith e as (    select \/*+ materialize *\/ *      from emp     where \ndeptno = 10 ) select *   from e\n \nPlan hash value: 3494145522\n \n--------------------------------------------------------------------------------\n| Id  | Operation                                | Name                        |\n--------------------------------------------------------------------------------\n|   0 | SELECT STATEMENT                         |                             |\n|   1 |  TEMP TABLE TRANSFORMATION               |                             |\n|   2 |   LOAD AS SELECT (CURSOR DURATION MEMORY)| SYS_TEMP_DFD9DB186_8AAEBD74 |\n|   3 |    TABLE ACCESS STORAGE FULL             | EMP                         |\n|   4 |   VIEW                                   |                             |\n|   5 |    TABLE ACCESS STORAGE FULL             | SYS_TEMP_DFD9DB186_8AAEBD74 |\n--------------------------------------------------------------------------------\n \nHint Report (identified by operation id \/ Query Block Name \/ Object Alias):\nTotal hints for statement: 1\n---------------------------------------------------------------------------\n \n   2 -  SEL$1\n           -  materialize\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">with<\/span><span style=\"color: #D4D4D4\"> e <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ materialize *\/<\/span><span style=\"color: #D4D4D4\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> deptno = <\/span><span style=\"color: #B5CEA8\">10<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dbms_xplan.display_cursor(format =&gt; <\/span><span style=\"color: #CE9178\">&#39;basic +hint_report&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">EXPLAINED <\/span><span style=\"color: #569CD6\">SQL<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">with<\/span><span style=\"color: #D4D4D4\"> e <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> (    <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">\/*+ materialize *\/<\/span><span style=\"color: #D4D4D4\"> *      <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp     <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">deptno = <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\"> ) <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> *   <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Plan <\/span><span style=\"color: #569CD6\">hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">value<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">3494145522<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                                | <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\">                        |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">STATEMENT<\/span><span style=\"color: #D4D4D4\">                         |                             |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> |  TEMP <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> TRANSFORMATION               |                             |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> |   <\/span><span style=\"color: #569CD6\">LOAD<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">CURSOR<\/span><span style=\"color: #D4D4D4\"> DURATION MEMORY)| SYS_TEMP_DFD9DB186_8AAEBD74 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> |    <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS STORAGE FULL             | EMP                         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\"> |   VIEW                                   |                             |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\"> |    <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> ACCESS STORAGE FULL             | SYS_TEMP_DFD9DB186_8AAEBD74 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">--------------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Hint Report (identified <\/span><span style=\"color: #569CD6\">by<\/span><span style=\"color: #D4D4D4\"> operation id \/ Query <\/span><span style=\"color: #569CD6\">Block<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">Name<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #569CD6\">Object<\/span><span style=\"color: #D4D4D4\"> Alias):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Total hints <\/span><span style=\"color: #569CD6\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">statement<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">---------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> -  SEL$<\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">           -  materialize<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Now, the <code>materialize<\/code> hint has an effect on the execution plan and the hint is reported as used on line 33.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>I believe that hints are required for certain use cases. You may have a different opinion. However, if you are using hints in your code you should ensure that they are valid. db* CODECOP can help you to do that. The SQL Developer extension is free. Just use it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction I have used the Oracle Database for many years. And I use hints. For experiments, but also in production code. There are cases when you know more than the Oracle Database. For example about the cardinality of a data source or the number of result rows to process or the number<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":11467,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[129,86,92,85,87],"class_list":["post-11443","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-arbori","tag-code-analysis","tag-plsql-cop","tag-sql","tag-sql-developer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Finding Wrong Hints - Philipp Salvisberg&#039;s Blog<\/title>\n<meta name=\"description\" content=\"Optimizer hints are a way to provide additional information, limit the solution space and enable the database to do a better job.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Finding Wrong Hints - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"Optimizer hints are a way to provide additional information, limit the solution space and enable the database to do a better job.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-14T19:32:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-08T15:36:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/magnifying-glass.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1070\" \/>\n\t<meta property=\"og:image:height\" content=\"1280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Philipp Salvisberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philipp Salvisberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"Finding Wrong Hints\",\"datePublished\":\"2022-01-14T19:32:55+00:00\",\"dateModified\":\"2023-11-08T15:36:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/\"},\"wordCount\":923,\"commentCount\":8,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/magnifying-glass.png\",\"keywords\":[\"Arbori\",\"Code Analysis\",\"PL\\\/SQL Cop\",\"SQL\",\"SQL Developer\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/\",\"name\":\"Finding Wrong Hints - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/magnifying-glass.png\",\"datePublished\":\"2022-01-14T19:32:55+00:00\",\"dateModified\":\"2023-11-08T15:36:24+00:00\",\"description\":\"Optimizer hints are a way to provide additional information, limit the solution space and enable the database to do a better job.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/magnifying-glass.png\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/magnifying-glass.png\",\"width\":1070,\"height\":1280},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2022\\\/01\\\/14\\\/finding-wrong-hints\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Finding Wrong Hints\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Finding Wrong Hints - Philipp Salvisberg&#039;s Blog","description":"Optimizer hints are a way to provide additional information, limit the solution space and enable the database to do a better job.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/","og_locale":"en_US","og_type":"article","og_title":"Finding Wrong Hints - Philipp Salvisberg&#039;s Blog","og_description":"Optimizer hints are a way to provide additional information, limit the solution space and enable the database to do a better job.","og_url":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2022-01-14T19:32:55+00:00","article_modified_time":"2023-11-08T15:36:24+00:00","og_image":[{"width":1070,"height":1280,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/magnifying-glass.png","type":"image\/png"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"Finding Wrong Hints","datePublished":"2022-01-14T19:32:55+00:00","dateModified":"2023-11-08T15:36:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/"},"wordCount":923,"commentCount":8,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/magnifying-glass.png","keywords":["Arbori","Code Analysis","PL\/SQL Cop","SQL","SQL Developer"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/","url":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/","name":"Finding Wrong Hints - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/magnifying-glass.png","datePublished":"2022-01-14T19:32:55+00:00","dateModified":"2023-11-08T15:36:24+00:00","description":"Optimizer hints are a way to provide additional information, limit the solution space and enable the database to do a better job.","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/magnifying-glass.png","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2022\/01\/magnifying-glass.png","width":1070,"height":1280},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2022\/01\/14\/finding-wrong-hints\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Finding Wrong Hints"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/11443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=11443"}],"version-history":[{"count":28,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/11443\/revisions"}],"predecessor-version":[{"id":12716,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/11443\/revisions\/12716"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/11467"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=11443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=11443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=11443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}