performance tuning guidelines

Upload: crecykengmailcom

Post on 08-Apr-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 performance tuning guidelines

    1/4

    Code Review guidelines:

    MUST DOs during a code review :

    1. Get an Explain Plan and study all cursors and sqls.

    2. Dont consider the current elapsed time as a measure of performance becausethe code review is done on development database and the data volume in it is notrealistic or comparable to Production.

    3. Look out for full table scans and try tuning SQL to avoid them.

    Things to look for while doing a code review :

    1. Always Use select count(indexed_column) , as it will use index.

    select count( indexed_ column) from table [Most Efficient]select count(*) from table [Close Second]

    select count( 1) from table [Distant Third].

    2. Breakup the DECODE in the where clause.

    Bad -DECODE (warehouse_id, 1, 'Southlake',

    a. 2, 'San Francisco',b. 3, 'New Jersey',

    c. 4, 'Seattle',d. 'Non-domestic') = new_location

    Good -

    ((warehouse_id = 1 and new_location = 'Southlake') OR

    (warehouse_id = 2 and new_location = 'San Francisco') OR(warehouse_id = 3 and new_location = 'New Jersey') OR

    (warehouse_id = 4 and new_location = 'Seattle') OR( new_location = 'Non-domestic') )

    3. Rewrite the NVL in where clause

    Bad -NVL(this_value, 99) = other_value

    Good -

    (this_value is null and other_value = 99) OR(this_value is not null and this_value = other_value)

    4. If possible, consider to rewrite TRUNC in where clause.

    Bad -

    TRUNC(start_date) = to_char(29-JUL-2002,DD-MON-YYYY)

    Good -start_date > one_date 1 AND start_date

  • 8/7/2019 performance tuning guidelines

    2/4

    5. Try to avoid using functions on indexed columns.

    6. When index scan performs more block visitations than a full table scan, betterto use full table scans

    7. Fast full table scans are an alternative to full table scans when the indexcontains all the columns that are needed for the query.

    8. Consider bitmapindexes when where clause predicate contain low-

    cardinality columns, contain logical operations such as OR,AND or NOT onthose columns.

    9. For very complex queries with many OR conditions , consider rewriting them

    using UNIONALL

    10. Make use of composite indexes. These need to be ordered in the

    decreasing order of selectivity.

    11. If your query contains subqueries , tune them.

    12. If a join will provide you the with functionality of the subquery, try the join

    method first, before trying the subquery method.

    13.Use NOT EXISTS instead of NOT IN in the where clause predicates.

    Bad -select * from emp where

    deptno not in (select deptno from dept where deptstatus = A)

    Good -

    select * from emp wherenot exists (select X from dept wheredeptstatus = Aand

    dept. deptno = emp. deptno).

    14.Consider to use LIKE operator instead of SUBSTR function.

    Bad -SUBSTR(column_name,1,4) = GOOD

    Good -

    Column_name LIKE GOOD%

    15. Create indexes on foreign key columns if the queries always retrieve

    master-detail relationship-based rows.

    16. Where ever possible replace the view with the view definition if the tables

    in the view are being used in the actual query.

    17. Dont use hints and never inside or on views as this will not allow the system

    to improve is in future a better execution path comes up.

  • 8/7/2019 performance tuning guidelines

    3/4

    18. When doing join of three or more tables, try to structure the query to do the

    greatest elimination on the first join. This can often be done by incorporating

    all of the restrictive where clause conditions on one table. The result is asmaller driving set.

    19. For very large tables , consider taking advantage of table and indexpartitioning.

    20. If possible, write SQL statements in such a way that sorting is not needed.

    Several SQL language components cause implicit sorts , such as DISTINCT,

    GROUP BY, UNION, MINUS and INTERSECT.

    21. Sorts can be avoided by creating indexes. If possible create index on ORDER

    BY columns this should be the last option as a solution.

    22. If you have a non-equijoin , a nested loops is the only possible join

    operation. It is possible that the outer table is accessed with full table scan

    23. Consider to create function based indexes statements that containexpressions in the WHERE clauses.

    24. Use histograms for a column when the data is highly skewed.

    25. Avoid using histograms when columns is not used inwhereclause, the

    column is unique and used only with equality predicates, all predicates on thecolumn use bind variables , the column data is uniformly distributed.

    26. Experiment with redundantjoins. For example, if you join three tables, two

    joins are adequate. Adding a third may give the optimizer more options.

    27. Is there any unnecessary or redundant action? Are DISTINCT and UNIONoverused? Do you see HAVING used like WHERE?

    28. To improve SQL efficiency, useequijoins whenever possible.

    29.Tweek the Where clause to get the job of ORDER BY

    Bad -select * from address order by city

    Good -

    select * from address where city >

    30. Consider EXISTS in place ofDISTINCT, avoid joins that use DISTINCT, use

    EXISTS sub- query instead

    Bad -select distinct deptno, deptname from emp, dept where

    emp. deptno = dept. deptno

  • 8/7/2019 performance tuning guidelines

    4/4

    Good select deptno, deptname from dept where

    exists (select X from emp whereemp. deptno = dept. deptno).

    31. Order Table in the FROM Clause , its important under rule based optimizer,

    and won't hurt under cost based optimizer . Order FROM clauses indescending order of table sizes based upon row counts

    select * from larger table, smaller tableselect * from larger table, smaller table, smallest table

    select * from larger table, smaller table, associative table.