Query Performance
Query Performance
Query Performance
March 5, 2009 by Deepanshu Mehta
For any production database, SQL query performance becomes an issue sooner or later.
Having long-running queries not only consumes system resources that makes the server
and application run slowly, but also may lead to table locking and data corruption issues.
So, query optimization becomes an important task.
Nowadays all databases have their own query optimizer, and offers a way for users to
understand how a query is executed. For example, which index from which table is being
used to execute the query? The first step to query optimization is understanding what the
database is doing. Different databases have different commands for this. For example, in
MySQL, one can use “EXPLAIN [SQL Query]” keyword to see the query plan. In
Oracle, one can use “EXPLAIN PLAN FOR [SQL Query]” to see the query plan.
The more data returned from the query, the more resources the database needs to expand
to process and store these data. So for example, if you only need to retrieve one column
from a table, do not use ‘SELECT *’.
Sometimes logic for a query can be quite complex. Often, it is possible to achieve the
desired result through the use of subqueries, inline views, and UNION-type statements.
For those cases, the intermediate results are not stored in the database, but are
immediately used within the query. This can lead to performance issues, especially when
the intermediate results have a large number of rows.
The way to increase query performance in those cases is to store the intermediate results
in a temporary table, and break up the initial SQL statement into several SQL statements.
In many cases, you can even build an index on the temporary table to speed up the query
performance even more. Granted, this adds a little complexity in query management (i.e.,
the need to manage temporary tables), but the speedup in query performance is often
worth the trouble.