240 likes | 561 Views
Hints in Oracle. What are Hints?. Hints give specific information that we know about our data and application. A way to override the default query optimization in the DBMS Influence the execution plan of query. Why Use Hints?. Oracle optimizer may not always choose the best execution plan
E N D
What are Hints? • Hints give specific information that we know about our data and application. • A way to override the default query optimization in the DBMS • Influence the execution plan of query
Why Use Hints? • Oracle optimizer may not always choose the best execution plan • Using hints may improve the performance by changing the execution plan oracle takes.
Using Hints • Hints can be used in the Select, Delete, and Update clauses. • In each statement, the hint goes directly after the Select, Delete, or Update keyword. A few hints use Insert. • Hints are placed in the /*+ */ tag, where the hint goes after the + sign • Ex: SELECT /*+ ALL_ROWS */ From…
Types of Hints • Approach hints • Access hints • Join hints • Misc. hints
Approach Hints • ALL_ROWS: Minimizes total resource consumption. Results will be returned only after all processing has been completed • FIRST_ROWS(n): Minimized response time, or minimal resource usage to return the first n rows.
Access Hints • FULL(table): Chooses a full table scan for the table, even if there is an index available. • INDEX(table [index [index]...]): Chooses an Index scan for the table.
Index Hint Example • CIS Department has far more males than females • SELECT /*+ FULL(s) */ id, name FROM Student s WHERE sex = ‘m’; • SELECT /*+ Index(s sex_index) */ id, name FROM Student s WHERE sex = ‘f’;
Join hints • ORDERED: tables are joined in the order in which they appear in the FROM clause. • LEADING(table): specified table is the first table used in the join order. • USE_HASH(table [table] …): Tables are joined using a hash join. Smaller table is used to make a hash table on join key. The larger table is scanned using hash table to find joined rows.
Join Hints cont. • USE_NL(table [table]…): Joins tables using nested loops join, using specified table as inner join. For every row in outer table, oracle accesses every row in inner table. • USE_MERGE(table [table]…): Joins tables using a sort-merge join. Sorted list are made and then merged together. Best if tables are already sorted.
Misc. Hints • APPEND: Data is appended to the end of table, rather then using existing space. • CACHE(table): Blocks received are placed at the most recently used end of the LRU list in the buffer cache when a full table scan is preformed. • NOCACHE(table): Blocks received are placed at the least recently used end of the LRU list in the buffer cache.
Sources • Oracle documentation at: http://oracle.cis.ksu.edu/oradocs/index.htm