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:46]
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 124: 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 138: 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 206: 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 220: 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 288: 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>​
Line 302: Line 304:
     <td valign="​top"​ width="​50%">​     <td valign="​top"​ width="​50%">​
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&nbsp; &​nbsp; ​                                                Select ​&nbsp; &​nbsp; ​       I.GENDER, count(*) ​                <​br /> +&​nbsp; ​                                                Select ​&nbsp; &​nbsp;&​nbsp; ​       I.GENDER, count(*) ​                <​br /> 
-&​nbsp; ​&nbsp; &​nbsp; ​                                          ​from ​ &nbsp; &​nbsp; ​       HOUSEHOLDS H                       <​br /> +&nbsp; &​nbsp; ​                                          ​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br /> 
-&​nbsp; ​&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
-&nbsp; &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;&​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;&​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; &​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;&​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;&​nbsp; ​                                   ​<font color=red>​I.BIRTHDATE &gt; '​January 1, 1980'</​font>​ <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;​ +&nbsp; &​nbsp; ​                                          ​group by&​nbsp; ​                  ​I.GENDER&​nbsp;​<br /> 
-                                                                           ​</br>+                                                                                  </br> 
       </​font>​       </​font>​
     </td>     </td>
Line 367: 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>​
Line 381: Line 384:
     <td valign="​top"​ width="​50%">​     <td valign="​top"​ width="​50%">​
       <font face="'​Courier New'">​       <font face="'​Courier New'">​
-&nbsp; &​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; &​nbsp; ​                                          ​from ​ &nbsp; &​nbsp; ​       HOUSEHOLDS H                       <​br /> +&nbsp; &​nbsp; ​                                          ​from  ​&​nbsp; ​&​nbsp;&​nbsp; ​       HOUSEHOLDS H                       <​br /> 
-&​nbsp; ​&nbsp; &​nbsp; ​                                          ​join ​ &nbsp; &​nbsp; ​       INDIVIDUALS I                      <br /> +&nbsp; &​nbsp; ​                                          ​join  ​&​nbsp; ​&​nbsp;&​nbsp; ​       INDIVIDUALS I                      <br /> 
-&nbsp; &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;&​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;&​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; &​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;&​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;&​nbsp; ​                                   ​I.BIRTHDATE &gt; '​January 1, 1980' <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>​ +&nbsp; &​nbsp; ​                                          ​<font color=red>​group by&​nbsp; ​                  ​I.GENDER&​nbsp;</​font><br /
-                                                                           ​</br>+                                                                                  </br>
       </​font>​       </​font>​
     </td>     </td>
Line 405: Line 408:
    <​br />    <​br />
    <​br />    <​br />
-      ​</​font>​+<​-- ​     ​</​font>​
     </td>     </td>
     <td valign="​top">​     <td valign="​top">​
Line 435: Line 438:
 &​nbsp; ​                                                Join HOUSEHOLDS using HOUSEHOLD to (INDIVIDUALS)INDIVIDUALS using HOUSEHOLD; ​  </​br>​ &​nbsp; ​                                                Join HOUSEHOLDS using HOUSEHOLD to (INDIVIDUALS)INDIVIDUALS using HOUSEHOLD; ​  </​br>​
 &​nbsp; ​                                                ​Qualify (INDIVIDUALS)INDIVIDUALS where and BIRTHDATE > '"​January 1, 1980"'; ​   </br> &​nbsp; ​                                                ​Qualify (INDIVIDUALS)INDIVIDUALS where and BIRTHDATE > '"​January 1, 1980"'; ​   </br>
-&​nbsp;<​font color=red> ​                                ​Aggregate INDIVIDUALS using GENDER for GROUP(GENDER),​ COUNT(*); ​               </​br>​ +&​nbsp;<​font color=red> ​                                ​Aggregate INDIVIDUALS using GENDER for GROUP(GENDER),​ COUNT(*); ​               ​</​font>​</​br>​ 
-&​nbsp; ​                                                ​Return I.GENDER, COUNT('​*'​); ​                                                  </​font>​</br>+&​nbsp; ​                                                ​Return I.GENDER, COUNT('​*'​); ​                                                  </​br>​
 &​nbsp; ​                                                ​-------------------------------------------------------------------------------</​br>​ &​nbsp; ​                                                ​-------------------------------------------------------------------------------</​br>​
       </​font>​       </​font>​
Line 443: Line 446:
 </​table>  ​ </​table>  ​
 </​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>​
 +
  
 =====  ===== =====  =====
Line 453: 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.1328201176.txt.gz · Last modified: 2016/06/28 22:38 (external edit)