Administration: Optimizing Queries

Query Plans


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. In this way, Omnidex is first and foremost a SQL Engine for both relational and non-relational, or NoSQL, databases.

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 clauses, 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 access to the database whenever possible. In any of these situations, if there are not indexes to satisfy a step, it will process that part of the query 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.

Obtaining a Query Plan

Query plans are produced using the EXPLAIN command in OdxSQL. A plan can be obtain by preceding the SELECT statement with the word EXPLAIN, as shown in the example below:

> explain select name, phone, email from individuals;
----------------------------------- SUMMARY -----------------------------------
Select        NAME,
  from        INDIVIDUALS;

Version:      5.2.01  (Compiled Jan 23 2012 17:27:25)
----------------------------------- DETAILS -----------------------------------
Retrieve INDIVIDUALS sequentially;

The EXPLAIN command can also follow a query in OdxSQL. It will provide a query plan for the query that was just executed. This approach has the advantage of having more statistics about the query; however, generating the query plan before the query is run has the advantage of checking a query before it consumes too many resources.

A plan consists of two sections: the Summary and the Details. The Summary section shows the SQL statement, the version of Omnidex, and any optimization warnings or suggestions about the query. The Details section shows the steps that will be executed to satisfy the query.

In the simple example above, three columns are retrieved from the INDIVIDUALS table. Since no criteria was provided in a WHERE clause, the details of the plan show that the table is retrieved sequentially and the columns are returned. A simple warning indicates that a sequential scan is taking place, which in this case cannot be avoided.

Additional Resources

See also:

Back to top
admin/optimization/plans/home.txt ยท Last modified: 2016/06/28 22:38 (external edit)