Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
admin:optimization:plans:example [2012/02/02 16:33]
doc
admin:optimization:plans:example [2016/06/28 22:38] (current)
Line 3: Line 3:
 {{page>:​top_add&​nofooter&​noeditbtn}} {{page>:​top_add&​nofooter&​noeditbtn}}
  
-====== Administration ======+====== Administration: Optimizing Queries ​======
  
-===== Optimizing Queries ​=====+===== Query Plans =====
  
  
-**[[admin:​optimization:​plans:​home|Overview]]** |+[[admin:​optimization:​plans:​home|Overview]] |
 [[admin:​optimization:​plans:​reference|Anatomy of a Query Plan]] | [[admin:​optimization:​plans:​reference|Anatomy of a Query Plan]] |
-[[admin:​optimization:​plans:​example|Reading a Query Plan]] |+**[[admin:​optimization:​plans:​example|Reading a Query Plan]]** |
 [[admin:​optimization:​plans:​configuration|Configuring Query Plans]] | [[admin:​optimization:​plans:​configuration|Configuring Query Plans]] |
 [[admin:​optimization:​plans:​optimization|Optimizing Queries]] [[admin:​optimization:​plans:​optimization|Optimizing Queries]]
Line 19: Line 19:
 ==== Reading a Query Plan ==== ==== Reading a Query Plan ====
  
-The following is a rather straightforward query that joins two tables together --- Individuals and their respective Households --- and aggregates counts of all people born since 1980 that are either in Denver, CO or in Phoenix, AZ.  The result is a display of counts by Gender. ​ Let's take a look at how Omnidex optimizes this query.  ​+The following is a rather straightforward query that joins two tables together --- Individuals and their respective Households --- and aggregates counts of all people born since 1980 that are either in Denver, CO or in Phoenix, AZ.  The result is a display of counts by Gender. ​ Let's take a look at the query plan to understand ​how Omnidex optimizes this query.  ​
  
 <​html>​ <​html>​
Line 26: Line 26:
     <td valign="​top">​     <td valign="​top">​
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&​nbsp; ​                                                ​Select &nbsp; &​nbsp; ​       I.GENDER, count(*) ​                <​br /> +&​nbsp; ​                                                ​Select ​&​nbsp; ​&​nbsp;&​nbsp; ​       I.GENDER, count(*) ​                <​br /> 
-&nbsp; &​nbsp; ​                                          ​from ​ &nbsp; &​nbsp; ​       HOUSEHOLDS H                       <​br /> +&nbsp; &​nbsp; ​                                          ​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br /> 
-&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
-&nbsp; &nbsp; &​nbsp; ​                                     ​on  ​&nbsp; &​nbsp; ​       H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> +&​nbsp; ​&​nbsp; ​                                          ​on ​   ​&nbsp; &nbsp; &​nbsp;&​nbsp;​ H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> 
-&​nbsp;&​nbsp; ​                                          ​where ​ &nbsp; &​nbsp; ​       ((H.STATE = '​CO'​ and               <​br /> +&nbsp; &​nbsp; ​                                          where &​nbsp;&​nbsp;​&​nbsp; ​        ((H.STATE = '​CO'​ and               <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Denver'​) or            <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Denver'​) or            <br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> +&​nbsp; ​&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Phoenix'​)) and         <​br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Phoenix'​)) and         <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   I.BIRTHDATE &gt; '​January 1, 1980' <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                        ​I.BIRTHDATE &gt; '​January 1, 1980' <br /> 
-&​nbsp; ​                                                ​group by &​nbsp; ​            ​I.GENDER&​nbsp;​+&​nbsp; ​&​nbsp; ​                                          group by&​nbsp; ​                  ​I.GENDER&​nbsp;​
       </​font>​       </​font>​
     </td>     </td>
Line 58: Line 58:
     <td valign="​top"​ width="​50%">​     <td valign="​top"​ width="​50%">​
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&​nbsp; ​                                                ​Select &nbsp; &​nbsp; ​       <font color=red>​I.GENDER,​ count(*) </​font><​br /> +&​nbsp; ​                                                ​Select ​&​nbsp; ​&​nbsp;&​nbsp; ​       <font color=red>​I.GENDER,​ count(*) </​font><​br /> 
-&nbsp; &​nbsp; ​                                         <font color=red>​ from  &nbsp; &​nbsp; ​       HOUSEHOLDS H       <​br /> +&nbsp; &​nbsp; ​                                         <font color=red>​ from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H       <​br /> 
-&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
-&nbsp; &nbsp; &​nbsp; ​                                     ​on  ​&nbsp; &​nbsp; ​       H.HOUSEHOLD = I.HOUSEHOLD ​         </​font><​br /> +&​nbsp; ​&​nbsp; ​                                          ​on ​   ​&nbsp; &nbsp; &​nbsp;&​nbsp;​ H.HOUSEHOLD = I.HOUSEHOLD ​         </​font><​br /> 
-&​nbsp;&​nbsp; ​                                          ​where ​ &nbsp; &​nbsp; ​       ((H.STATE = '​CO'​ and               <​br /> +&nbsp; &​nbsp; ​                                          where &nbsp; &​nbsp; ​             ((H.STATE = '​CO'​ and               <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Denver'​) or            <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Denver'​) or            <br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> +&​nbsp; ​&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Phoenix'​)) and         <​br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Phoenix'​)) and         <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   I.BIRTHDATE &gt; '​January 1, 1980' <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                        ​I.BIRTHDATE &gt; '​January 1, 1980' <br /> 
-&​nbsp; ​                                                ​<font color=red>​group by &​nbsp; ​            ​I.GENDER&​nbsp;</​font><​br />+&​nbsp; ​&​nbsp; ​                                          <font color=red>​group by&​nbsp; ​  ​I.GENDER&​nbsp;</​font><​br />
                                                                                   </br>                                                                                   </br>
       </​font>​       </​font>​
Line 73: Line 73:
     <td valign="​top">​     <td valign="​top">​
       <font color=red>​       <font color=red>​
-<​-- ​                                                           <br /> +<​--<​br /> 
-                                                               ​<br /> +   ​<br /> 
-                                                               ​<br /> +   ​<br /> 
-                                                               ​<br /> +   ​<br /> 
-                                                               ​<br /> +   ​<br /> 
-                                                               ​<br /> +   ​<br /> 
-                                                               ​<br /> +   ​<br /> 
-                                                               ​<br /> +   ​<br /> 
-                                                               ​<br /> +   ​<br />
       </​font>​       </​font>​
     </td>     </td>
Line 125: Line 124:
 === Step 2: Process the HOUSEHOLDS table'​s criteria === === Step 2: Process the HOUSEHOLDS table'​s criteria ===
  
-Omnidex will perform index qualifications to process the criteria in the HOUSEHOLDS table, paying attention to Boolean operators and parentheses to insure the correct result. ​ Once this is done, Omnidex will have isolated the rows that meet this criteria, identified by a temporary file containing index pointers.+Omnidex will perform index qualifications to process the criteria in the HOUSEHOLDS table, paying attention to Boolean operators and parentheses to insure the correct result. ​ Once this is done, Omnidex will have isolated ​index pointers for the rows that meet this criteria.
  
 <​html>​ <​html>​
Line 139: Line 138:
     <td valign="​top"​ width="​50%">​     <td valign="​top"​ width="​50%">​
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&​nbsp; ​                                                ​Select &nbsp; &​nbsp; ​       I.GENDER, count(*) ​                <​br /> +&​nbsp; ​                                                ​Select ​&​nbsp; ​&​nbsp;&​nbsp; ​       I.GENDER, count(*) ​                <​br /> 
-&nbsp; &​nbsp; ​                                          ​from ​ &nbsp; &​nbsp; ​       HOUSEHOLDS H                       <​br /> +&nbsp; &​nbsp; ​                                          ​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br /> 
-&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
-&nbsp; &nbsp; &​nbsp; ​                                     ​on  ​&nbsp; &​nbsp; ​       H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> +&​nbsp; ​&​nbsp; ​                                          ​on ​   ​&nbsp; &nbsp; &​nbsp;&​nbsp;​ H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> 
-&​nbsp;&​nbsp; ​                                          ​where ​ &nbsp; &​nbsp; ​       <font color=red>​((H.STATE = '​CO'​ and               ​<br /> +&nbsp; &​nbsp; ​                                          where &nbsp; &​nbsp; ​             <font color=red>​((H.STATE = '​CO'​ and <br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Denver'​) or            <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Denver'​) or            <br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> +&​nbsp; ​&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Phoenix'​))</​font>​ and         ​<br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Phoenix'​))</​font>​ and  <br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   I.BIRTHDATE &gt; '​January 1, 1980' <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                        ​I.BIRTHDATE &gt; '​January 1, 1980' <br /> 
-&​nbsp; ​                                                ​group by &​nbsp; ​            ​I.GENDER&​nbsp;<​br />+&​nbsp; ​&​nbsp; ​                                          group by&​nbsp; ​                  ​I.GENDER&​nbsp;<​br />
                                                                                   </br>                                                                                   </br>
 +
       </​font>​       </​font>​
     </td>     </td>
Line 207: Line 207:
 === Step 3: Join from HOUSEHOLDS to INDIVIDUALS === === Step 3: Join from HOUSEHOLDS to INDIVIDUALS ===
  
-Omnidex will join from the HOUSEHOLDS table to the INDIVIDUALS table. ​ Omnidex has several techniques for optimizing table joins. ​ In this case, it will use the primary key values in HOUSEHOLDS as criteria against thed HOUSEHOLD index in the INDIVIDUALS table.  ​Once this is done, Omnidex will have isolated rows in the INDIVIDUALS table that meet the criteria from the HOUSEHOLDS ​table.+Omnidex will join from the HOUSEHOLDS table to the INDIVIDUALS table. ​ Omnidex has several techniques for optimizing table joins. ​ In this case, it will use the primary key values in HOUSEHOLDS as criteria against thed HOUSEHOLD index in the INDIVIDUALS table. ​ Omnidex will then have isolated ​index pointers for rows in the INDIVIDUALS table that link to the previously qualified ​HOUSEHOLDS ​rows.
  
 <​html>​ <​html>​
Line 221: Line 221:
     <td valign="​top"​ width="​50%">​     <td valign="​top"​ width="​50%">​
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&​nbsp; ​                                                ​Select &nbsp; &​nbsp; ​       I.GENDER, count(*) ​                <​br /> +&​nbsp; ​                                                ​Select ​&​nbsp; ​&​nbsp;&​nbsp; ​       I.GENDER, count(*) ​                <​br /> 
-&nbsp; &​nbsp; ​                                          <​font color=red>​from ​ &nbsp; &​nbsp; ​       HOUSEHOLDS H       <​br /> +&nbsp; &​nbsp; ​                                          <​font color=red>​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H       <​br /> 
-&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
-&nbsp; &nbsp; &​nbsp; ​                                     ​on  ​&nbsp; &​nbsp; ​       H.HOUSEHOLD = I.HOUSEHOLD </​font> ​ <br /> +&​nbsp; ​&​nbsp; ​                                          ​on ​   ​&nbsp; &nbsp; &​nbsp;&​nbsp;​ H.HOUSEHOLD = I.HOUSEHOLD </​font> ​ <br /> 
-&​nbsp;&​nbsp; ​                                          ​where ​ &nbsp; &​nbsp; ​       ((H.STATE = '​CO'​ and               <​br /> +&nbsp; &​nbsp; ​                                          where &nbsp; &​nbsp; ​             ((H.STATE = '​CO'​ and               <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Denver'​) or            <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Denver'​) or            <br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> +&​nbsp; ​&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                              ​H.CITY = '​Phoenix'​)) and         <​br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Phoenix'​)) and         <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   I.BIRTHDATE &gt; '​January 1, 1980' <br /> +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                        ​I.BIRTHDATE &gt; '​January 1, 1980' <br /> 
-&​nbsp; ​                                                ​group by &​nbsp; ​            ​I.GENDER&​nbsp;​ +&​nbsp; ​&​nbsp; ​                                          group by&​nbsp; ​                  ​I.GENDER&​nbsp;​<br /> 
-                                                                           ​</br>+                                                                                  </br> 
       </​font>​       </​font>​
     </td>     </td>
Line 289: Line 290:
 === Step 4: Process the INDIVIDUALS table'​s criteria === === Step 4: Process the INDIVIDUALS table'​s criteria ===
  
-Omnidex will perform index qualifications to process the criteria in the INDIVIDUALS table. ​ This will further refine the index pointers ​already identified by processing in the HOUSEHOLDS ​table.+Omnidex will perform index qualifications to process the criteria in the INDIVIDUALS table. ​ This will further refine the index pointers ​so that they reflect criteria from both tables, as well as the table join itself.
  
 <​html>​ <​html>​
-<​table>​+<​table ​width="​100%"​>
   <tr>   <tr>
-    <​td ​valign="top">+    <​td ​colspan="3">
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&nbsp; &​nbsp; ​                                                ​Select &nbsp; &​nbsp; ​       I.GENDER, count(*) ​                <​br /> +&​nbsp; ​                                                ----------------------------------- SUMMARY -----------------------------------</​br>​ 
-&​nbsp; ​&nbsp; &​nbsp; ​                                          ​from ​ &nbsp; &​nbsp; ​       HOUSEHOLDS H                       <​br /> +      </​font>​ 
-&​nbsp; ​&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +    </​td>​ 
-&nbsp; &nbsp; &nbsp; &​nbsp; ​                                     ​on  ​&nbsp; &​nbsp; ​       H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> +  </​tr>​ 
-&​nbsp; ​&​nbsp;&​nbsp; ​                                          ​where ​ &nbsp; &​nbsp; ​       ((H.STATE = '​CO'​ and               <​br /> +  <​tr>​ 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&​nbsp; ​                              H.CITY = '​Denver'​) or            <br /> +    <td valign="​top"​ width="​50%">​ 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> +      <font face="'​Courier New'">​ 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&​nbsp; ​                              H.CITY = '​Phoenix'​)) and         <​br /> +&​nbsp; ​                                                ​Select ​&​nbsp; ​&​nbsp;&​nbsp; ​       I.GENDER, count(*) ​                <​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&​nbsp; ​                                   ​<font color=red>​I.BIRTHDATE &gt; '​January 1, 1980'</​font>​ <br /> +&nbsp; &​nbsp; ​                                          ​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br /> 
-&nbsp; &​nbsp; ​                                                ​group by &​nbsp; ​            ​I.GENDER&​nbsp;​+&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
 +&nbsp; &​nbsp; ​                                          on    ​&nbsp; &nbsp; &​nbsp;&​nbsp;​ H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> 
 +&nbsp; &​nbsp; ​                                          where &nbsp; &​nbsp; ​             ((H.STATE = '​CO'​ and               <​br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Denver'​) or            <br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Phoenix'​)) and         <​br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                        ​<font color=red>​I.BIRTHDATE &gt; '​January 1, 1980' </​font><​br /> 
 +&nbsp; &​nbsp; ​                                          ​group by&​nbsp; ​                  ​I.GENDER&​nbsp;​<br /> 
 +                                                                                  </​br>​ 
       </​font>​       </​font>​
     </td>     </td>
     <td valign="​top">​     <td valign="​top">​
       <font color=red>​       <font color=red>​
-                                                                                                                             <br /> +   <br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                              <​-- ​                                                           <br /> +<​--<​br />
       </​font>​       </​font>​
     </td>     </td>
     <td valign="​top">​     <td valign="​top">​
       <font color=red>​       <font color=red>​
-                                                                                                                             <br /> +                                           <br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                              Omnidex will use the BIRTHDATE index to process the            ​<br /> +Omnidex will use the BIRTHDATE index to    <br /> 
-                                                              INDIVIDUALS ​table's criteria. ​                         ​+process ​INDIVIDUALS'​s criteria. ​            
 +      </​font>​ 
 +    </​td>​ 
 +  </​tr>​ 
 +  <​tr>​ 
 +    <td colspan="​3">​ 
 +      <font face="'​Courier New'">​ 
 +&​nbsp; ​                                                ​Version: ​     5.2.01 ​ (Compiled Jan 23 2012 17:​27:​25) ​                         </​br>​ 
 +&​nbsp; ​                                                ​----------------------------------- DETAILS -----------------------------------</​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where CITY = '​Denver'; ​                         </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where and STATE = '​CO'; ​                        </​br>​ 
 +&​nbsp; ​                                                ​Create index segment O1 on 1;                                                  </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where CITY = '​Phoenix'; ​                        </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where and STATE = '​AZ'; ​                        </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where or $ODXID = '​segment(O1)'; ​               </​br>​ 
 +&​nbsp; ​                                                Join HOUSEHOLDS using HOUSEHOLD to (INDIVIDUALS)INDIVIDUALS using HOUSEHOLD; ​  </​br>​ 
 +&​nbsp;<​font color=red> ​                                ​Qualify (INDIVIDUALS)INDIVIDUALS where and BIRTHDATE > '"​January 1, 1980"'; ​   </​font></​br>​ 
 +&​nbsp; ​                                                ​Aggregate INDIVIDUALS using GENDER for GROUP(GENDER),​ COUNT(*); ​               </​br>​ 
 +&​nbsp; ​                                                ​Return I.GENDER, COUNT('​*'​); ​                                                  </​br>​ 
 +&​nbsp; ​                                                ​-------------------------------------------------------------------------------</​br>​
       </​font>​       </​font>​
     </td>     </td>
Line 342: Line 370:
 === Step 5: Aggregate counts in the INDIVIDUALS table=== === Step 5: Aggregate counts in the INDIVIDUALS table===
  
-Omnidex will aggregate counts in the INDIVIDUALS table by scanning its indexes ​and filering ​the results using the index pointers ​set aside from the previous steps +Omnidex will aggregate counts in the INDIVIDUALS table using indexes ​on the GROUP BY columns, while also intersecting with the index pointers ​that were isolated while processing criteria and table joins.
  
 <​html>​ <​html>​
-<​table>​+<​table ​width="​100%"​>
   <tr>   <tr>
 +    <td colspan="​3">​
 +      <font face="'​Courier New'">​
 +&​nbsp; ​                                                ​----------------------------------- SUMMARY -----------------------------------</​br>​
 +      </​font>​
 +    </td>
 +  </tr>
 +  <tr>
 +    <td valign="​top"​ width="​50%">​
 +      <font face="'​Courier New'">​
 +&​nbsp; ​                                                ​Select &nbsp; &​nbsp;&​nbsp; ​       <font color=red>​I.GENDER,​ count(*) </​font><​br />
 +&nbsp; &​nbsp; ​                                          ​from ​ &nbsp; &​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br />
 +&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br />
 +&nbsp; &​nbsp; ​                                          ​on ​   &nbsp; &nbsp; &​nbsp;&​nbsp;​ H.HOUSEHOLD = I.HOUSEHOLD ​         <br />
 +&nbsp; &​nbsp; ​                                          where &nbsp; &​nbsp; ​             ((H.STATE = '​CO'​ and               <​br />
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Denver'​) or            <br />
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br />
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Phoenix'​)) and         <​br />
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                        ​I.BIRTHDATE &gt; '​January 1, 1980' <br />
 +&nbsp; &​nbsp; ​                                          <​font color=red>​group by&​nbsp; ​                  ​I.GENDER&​nbsp;</​font><​br />
 +                                                                                  </br>
 +      </​font>​
 +    </td>
     <td valign="​top">​     <td valign="​top">​
 +      <font color=red>​
 +<​--<​br />
 +   <​br />
 +   <​br />
 +   <​br />
 +   <​br />
 +   <​br />
 +   <​br />
 +   <​br />
 +   <​br />
 +<​-- ​     </​font>​
 +    </td>
 +    <td valign="​top">​
 +      <font color=red>​
 +Omnidex will aggregate counts using the    <br />
 +GENDER index, based on qualified rows.     <​br />
 +                                           <​br />
 +                                           <​br />
 +                                           <​br />
 +                                           <​br />
 +                                           <​br />
 +                                           <​br />
 +                                           <​br />
 +                                           <​br />
 +      </​font>​
 +    </td>
 +  </tr>
 +  <tr>
 +    <td colspan="​3">​
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&nbsp; &​nbsp; ​                                                Select ​&nbsp; &​nbsp; ​       <font color=red>​I.GENDER, ​count(*) </​font><​br /> +&​nbsp; ​                                                Version: ​     5.2.01 ​ (Compiled Jan 23 2012 17:​27:​25) ​                         </​br>​ 
-&nbsp; &nbsp; &​nbsp; ​                                          ​from ​ &nbsp; &​nbsp; ​       HOUSEHOLDS H                       <​br /> +&​nbsp; ​                                                ----------------------------------- DETAILS -----------------------------------</​br>​ 
-&​nbsp; ​&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +&​nbsp; ​                                                Qualify (HOUSEHOLDS)HOUSEHOLDS where CITY = '​Denver'; ​                         </​br>​ 
-&nbsp; &nbsp; &nbsp; &​nbsp; ​                                     ​on  ​&nbsp; &​nbsp; ​       H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where and STATE = '​CO'; ​                        </​br>​ 
-&​nbsp; ​&​nbsp;&​nbsp; ​                                          ​where ​ &nbsp; &​nbsp; ​       ((H.STATE = '​CO'​ and               <​br /> +&​nbsp; ​                                                ​Create index segment O1 on 1;                                                  </​br>​ 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&​nbsp; ​                              H.CITY = '​Denver'​) or            <br /> +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where CITY = '​Phoenix'; ​                        </​br>​ 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where and STATE = '​AZ'; ​                        </​br>​ 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&​nbsp; ​                              H.CITY = '​Phoenix'​)) and         <​br /> +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where or $ODXID = '​segment(O1)'; ​               </​br>​ 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&​nbsp; ​                                   ​I.BIRTHDATE &gt; '​January 1, 1980' <br /> +&​nbsp; ​                                                Join HOUSEHOLDS using HOUSEHOLD to (INDIVIDUALS)INDIVIDUALS using HOUSEHOLD; ​  </​br>​ 
-&nbsp; &​nbsp; ​                                                <font color=red>​group by &​nbsp; ​            ​I.GENDER&​nbsp;</​font>+&​nbsp; ​                                                ​Qualify (INDIVIDUALS)INDIVIDUALS where and BIRTHDATE > '"​January 1, 1980"'; ​   </​br>​ 
 +&​nbsp;<​font color=red> ​                                Aggregate INDIVIDUALS using GENDER for GROUP(GENDER),​ COUNT(*); ​               </​font></​br>​ 
 +&​nbsp; ​                                                ​Return ​I.GENDER, ​COUNT('*');                                                   </​br>​ 
 +&​nbsp; ​                                                ​-------------------------------------------------------------------------------</​br>​ 
 +      ​</​font>​ 
 +    ​</td> 
 +  </​tr>​ 
 +</​table> ​  
 +</​html>​ 
 + 
 +=== Step 6: Return the final result set === 
 + 
 +Omnidex will finally return the result set of the query. ​ When possible, Omnidex will return the first rows as soon as they are available, even if the later rows are still being processed. ​ This speeds query execution, and also helps when only the first screenfuls of data are going to be viewed. 
 + 
 +<​html>​ 
 +<table width="​100%">​ 
 +  <​tr>​ 
 +    <td colspan="​3">​ 
 +      <font face="'​Courier New'">​ 
 +&​nbsp; ​                                                ​----------------------------------- SUMMARY -----------------------------------</​br
 +      </font> 
 +    </​td>​ 
 +  </​tr>​ 
 +  <​tr>​ 
 +    <td valign="​top"​ width="​50%">​ 
 +      <font face="'​Courier New'"​
 +&​nbsp; ​                                                Select &nbsp; &​nbsp;&​nbsp; ​       <font color=red>​I.GENDER,​ count(*) </​font><​br /> 
 +&nbsp; &​nbsp; ​                                          ​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br /> 
 +&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
 +&nbsp; &​nbsp; ​                                          on    ​&nbsp; &nbsp; &​nbsp;&​nbsp;​ H.HOUSEHOLD = I.HOUSEHOLD ​         <br /> 
 +&nbsp; &​nbsp; ​                                          where &nbsp; &​nbsp; ​             ((H.STATE = '​CO'​ and               <​br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Denver'​) or            <br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp;&​nbsp; ​                                   (H.STATE = '​AZ'​ and               <​br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                   H.CITY = '​Phoenix'​)) and         <​br /> 
 +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &​nbsp; ​                                        ​I.BIRTHDATE &gt; '​January 1, 1980' <br /> 
 +&nbsp; &​nbsp; ​                                          ​group by&​nbsp; ​                  ​I.GENDER&​nbsp;<​br /
 +                                                                                  </br>
       </​font>​       </​font>​
     </td>     </td>
     <td valign="​top">​     <td valign="​top">​
       <font color=red>​       <font color=red>​
-                                                              ​<​-- ​                                                           <br /> +<​--<​br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br /> 
-                                                                                                                             ​<br /> +   ​<br />
-                                                                                                                             +
       </​font>​       </​font>​
     </td>     </td>
     <td valign="​top">​     <td valign="​top">​
       <font color=red>​       <font color=red>​
-                                                              ​Omnidex will use the GENDER index to aggregate counts ​         ​<br /> +Omnidex will return ​the result set.        ​<br /> 
-                                                              for the rows that have been isolated previously. ​              <br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br /> +                                           ​<br /> 
-                                                                                                                             ​<br />+      </font> 
 +    </​td>​ 
 +  </​tr>​ 
 +  <​tr>​ 
 +    <td colspan="​3">​ 
 +      <font face="'​Courier New'">​ 
 +&​nbsp; ​                                                ​Version: ​     5.2.01 ​ (Compiled Jan 23 2012 17:​27:​25) ​                         </br
 +&​nbsp; ​                                                ​----------------------------------- DETAILS -----------------------------------<​/br> 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where CITY = '​Denver'; ​                         </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where and STATE = '​CO'; ​                        </​br>​ 
 +&​nbsp; ​                                                ​Create index segment O1 on 1;                                                  </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where CITY = '​Phoenix'; ​                        </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where and STATE = '​AZ'; ​                        </​br>​ 
 +&​nbsp; ​                                                ​Qualify (HOUSEHOLDS)HOUSEHOLDS where or $ODXID = '​segment(O1)'; ​               </​br>​ 
 +&​nbsp; ​                                                Join HOUSEHOLDS using HOUSEHOLD to (INDIVIDUALS)INDIVIDUALS using HOUSEHOLD; ​  </​br>​ 
 +&​nbsp; ​                                                ​Qualify (INDIVIDUALS)INDIVIDUALS where and BIRTHDATE > '"​January 1, 1980"'; ​   </​br>​ 
 +&​nbsp; ​                                                ​Aggregate INDIVIDUALS using GENDER for GROUP(GENDER),​ COUNT(*); ​               </​br>​ 
 +&​nbsp;<​font color=red> ​                                ​Return I.GENDER, COUNT('​*'​); ​                                                  </​font></​br>​ 
 +&​nbsp; ​                                                ​-------------------------------------------------------------------------------</​br>
       </​font>​       </​font>​
     </td>     </td>
Line 403: Line 535:
 ====== Additional Resources ====== ====== Additional Resources ======
 See also: See also:
-{{page>:​admin:​indexing:​see_also&​nofooter&​noeditbtn}}+{{page>:​admin:​optimization:​see_also&​nofooter&​noeditbtn}}
  
 {{page>:​bottom_add&​nofooter&​noeditbtn}} {{page>:​bottom_add&​nofooter&​noeditbtn}}
 
Back to top
admin/optimization/plans/example.1328200389.txt.gz · Last modified: 2016/06/28 22:38 (external edit)