Differences

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

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
admin:optimization:plans:example [2012/02/02 16:09]
doc created
admin:optimization:plans:example [2012/02/03 19:56]
doc
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 17: Line 17:
 \\ \\
  
-==== Overview ​====+==== Reading a Query Plan ====
  
-Omnidex always optimizes a query as well as it can using the Omnidex indexes; however, if the indexes are not enough, Omnidex will complete the query without indexes, insuring the correct result. ​ In fact, Omnidex can process queries even when no Omnidex indexes are available at all.  In this way, Omnidex is first and foremost a SQL Engine for both relational and non-relational,​ or NoSQL, databases. ​  +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.  ​
- +
-Omnidex will evaluate the query and identify where indexes can be used.  Omnidex evaluates the tables and their join relationships. ​ Omnidex evaluates criteria, including nested queries, SQL functions and complex Boolean operations. ​ Omnidex evaluates group by and order by, both to perform aggregations and to avoid unnecessary sorting of data.  Omnidex even considers whether indexes can be used to return columns in the result set, avoiding accessing the data whenever possible. ​ If there are not indexes to satisfy any of these steps, it will process then without the aid of indexing. ​  +
- +
-The optimization plan for a query shows a sequence of steps, including table joins, processing criteria, aggregating data, and retrieving from the database. ​ The ideal with Omnidex optimization is to avoid retrieving from the database if possible, and to fully optimize the query solely through the Omnidex indexes. ​ If non-indexed steps are required, optimization tries to minimize these steps as much as possible. +
- +
-==== Optimizing a Sample 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 how Omnidex optimizes this query.  ​+
  
 <​html>​ <​html>​
Line 34: 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 66: 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 81: 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 133: 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 147: 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 215: 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 229: 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 297: 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 350: 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 ​valign="top">+    <​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; ​                                                ----------------------------------- 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; ​       <font color=red>​I.GENDER,​ count(*) </​font><​br /> 
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&​nbsp; ​                                   ​I.BIRTHDATE &gt; '​January 1, 1980' <br /> +&nbsp; &​nbsp; ​                                          ​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br /> 
-&nbsp; &​nbsp; ​                                                ​<font color=red>​group by &​nbsp; ​            ​I.GENDER&​nbsp;</​font>​+&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>​       </​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 aggregate counts ​using the    ​<br /> 
-                                                              for the rows that have been isolated previously              ​<br /> +GENDER index, based on qualified ​rows.     ​<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;<​font color=red> ​                                ​Aggregate INDIVIDUALS using GENDER for GROUP(GENDER),​ COUNT(*); ​               </​font></​br>​ 
 +&​nbsp; ​                                                ​Return I.GENDER, COUNT('​*'​); ​                                                  </​br>​ 
 +&​nbsp; ​                                                ​-------------------------------------------------------------------------------</​br>
       </​font>​       </​font>​
     </td>     </td>
Line 401: Line 447:
 </​html>​ </​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>​
 +    </td>
 +    <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 return the result set.        <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>​
 +    </td>
 +  </tr>
 +</​table>  ​
 +</​html>​
  
-[[admin:​optimization:​plans:​home| More >]] 
  
 =====  ===== =====  =====
 ---- ----
 \\ \\
-**[[admin:​optimization:​overview:hdc|Next]]**+**[[admin:​optimization:​plans:reference|Prev]]** | 
 +**[[admin:​optimization:​plans:​configuration|Next]]**
  
  
 
Back to top
admin/optimization/plans/example.txt · Last modified: 2016/06/28 22:38 (external edit)