Writing maintainable and efficient SQL statements requires a good deal of experience. You can write a SQL query in many different ways, each giving the same result, but one can be a hundred times slower than another, or one can be easier to understand and maintain than the other.
Depending on the circumstances, certain SQL constructs are preferable to others. For example, use of the EXISTS predicate is often preferable to DISTINCT. The next sections discuss the usage of such constructs.
The DISTINCT keyword used in a SELECT clause eliminates duplicate rows in the result set. To eliminate those duplicates, Oracle performs a sort, and that sort requires time and disk space. Therefore, avoid using DISTINCT if you can tolerate having duplicate rows returned by a query. If you can’t tolerate the duplicate rows, or your application can’t handle them, use EXISTS in place of DISTINCT.
For example, assume you are trying to find the names of customers who
have orders. Your query has to be based on two tables:
DISTINCT, your query would be written as follows:
SELECT DISTINCT c.cust_nbr, c.name FROM customer c JOIN cust_order o ON c.cust_nbr = o.cust_nbr;
The corresponding execution plan for this query is as follows. Note the SORT operation, which is a result of DISTINCT being used.
Query Plan ----------------------------------------- SELECT STATEMENT Cost = 3056 SORT ...