Oracle Optimizer
-
Upload
garrison-meadows -
Category
Documents
-
view
101 -
download
1
description
Transcript of Oracle Optimizer
Oracle OptimizerOracle Optimizer
Types of OptimizersTypes of Optimizers
• There are different modes for the optimizer
• RULE: Rule-based optimizer (RBO)– Deprecated; not updated since 1994
• CHOOSE: Default option. Chooses cost-based optimizer (CBO) if statistics available, rule-based optimizer otherwise.
ALTER SESSION SET optimizer_mode = {choose|rule|first_rows(_n)|all_rows}
Types of OptimizersTypes of Optimizers
• ALL_ROWS (CBO): Execute the query so that all of the rows are returned as quickly as possible– Merge Join has priority over Block Nested Loop Join
• FIRST_ROWS(n) (CBO): execute the query so that all of the first n rows are returned as quickly as possible– Block Nested Loop Join has priority over Merge
Join
analyze table | index
<table_name> | <index_name>
compute statistics |
estimate statistics [sample <integer>
rows | percent] |
delete statistics;
analyze table Sailors estimate statistics sample 25 percent;
Analyzing the DataAnalyzing the Data
Viewing the Execution PlanViewing the Execution Plan
• You need a PLAN_TABLE table. So, the first
time that you want to see execution plans,
run the command:
• Set autotrace on to see all plans
– Display the execution path for each query, after
being executed
@$ORACLE_HOME/rdbms/admin/utlxplan.sql
Operations that Access Operations that Access TablesTables
• TABLE ACCESS FULL: sequential table scan
– Oracle optimizes by reading multiple blocks
– Used whenever there is no where clause on a
query
select * from Sailors
• TABLE ACCESS BY ROWID: access rows by
their RowID values.
– How do you get the rowid? From an index!
select * from Sailors where sid > 10
Types of IndexesTypes of Indexes
• Unique: each row of the indexed table
contains a unique value for the
indexed column
• Nonunique: the row’s indexed values
can repeat
Operations that Use Operations that Use IndexesIndexes
• INDEX UNIQUE SCAN: Access of an
index that is defined to be unique
• INDEX RANGE SCAN: Access of an
index that is not unique or access of a
unique index for a range of values
When are Indexes Used/Not When are Indexes Used/Not Used?Used?
• If you set an indexed column equal to a value, e.g., sname = 'Jim'
• If you specify a range of values for an indexed column, e.g., sname like 'J%'– sname like '%m': will not use an index
– UPPER(sname) like 'J%' : will not use an index
– sname is null: will not use an index, since null values are not stored in the index
– sname is not null: will not use an index, since every value in the index would have to be accessed
When are Indexes Used? When are Indexes Used? (cont)(cont)
• 2*age = 20: Index on age will not be used. Index on 2*age will be used.
• sname != 'Jim': Index will not be used.
• MIN and MAX functions: Index will be used
• Equality of a column in a leading column of a multicolumn index. For example, suppose we have a multicolumn index on (sid, bid, day)– sid = 12: Can use the index
– bid = 101: Cannot use the index
Optimizer HintsOptimizer Hints
• You can give the optimizer hints about
how to perform query evaluation
• Hints are written in /*+ */ right after
the select
• Note: These are only hints. The Oracle
optimizer can choose to ignore your
hints
HintsHints
• FULL hint: tell the optimizer to perform a
TABLE ACCESS FULL operation on the
specified table
• ROWID hint: tell the optimizer to perform a
TABLE ACCESS BY ROWID operation on the
specified table
• INDEX hint: tells the optimizer to use an
index-based scan on the specified table
ExamplesExamples
Select /*+ FULL (sailors) */ sidFrom sailorsWhere sname=‘Joe’;
Select /*+ INDEX (sailors) */ sidFrom sailorsWhere sname=‘Joe’;
Select /*+ INDEX (sailors s_ind) */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;
Combining Output From Combining Output From Multiple Index ScansMultiple Index Scans
• Suppose we have 2 indexes: sname, rating
• select * from sailorswhere sname = 'Jim' and rating = 10----------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'SAILORS‘
2 1 AND-EQUAL
3 2 INDEX (RANGE SCAN) OF 'SNAME_IND' (NON-UNIQUE)
4 2 INDEX (RANGE SCAN) OF 'RAT' (NON-UNIQUE)
Operations that Manipulate Data Operations that Manipulate Data SetsSets
• Up until now, all operations returned the rows as they were found
• There are operations that must find all rows before returning a single row
• Try to avoid these operations for online users!– SORT ORDER BY: query with order by
select sname, age
from Sailors
order by age;
Operations that Manipulate Data Operations that Manipulate Data SetsSets
– SORT UNIQUE: sorting records while
eliminating duplicates (e.g., query
with distinct; query with minus,
intersect or union)
– SORT AGGREGATE, SORT GROUP BY:
queries with aggregate or grouping
functions (like MIN, MAX)
Is the table always Is the table always accessed?accessed?
What if there is no index?
Operations that Manipulate Data Operations that Manipulate Data SetsSets
• Consider the query:
– select sname from sailors
union
select bname from boats;
Operations that Manipulate Data Operations that Manipulate Data SetsSets
• Consider the query:
– select sname from sailors
minus
select bname from boats;
How do you think that
Oracle implements intersect?union all?
• Select MIN(age), COUNT(*)
from Sailors
GROUP BY rating
------------------------------------------0 SELECT
STATEMENT Optimizer=CHOOSE
1 0 SORT (GROUP BY)
2 1 TABLE ACCESS (FULL) OF 'SAILORS'
Operations that Manipulate Data Operations that Manipulate Data SetsSets
DistinctDistinct
• What should Oracle do when
processing the query (assuming that
sid is the primary key):
– select distinct sid
from Sailors
• Try it!!
Join MethodsJoin Methods
• Select * from Sailors, Reserves
where Sailors.sid = Reserves.sid
• Oracle can use an index on Sailors.sid
or on Reserves.sid (note that both will
not be used)
• Join Methods: MERGE JOIN, NESTED
LOOPS, HASH JOIN
Nested Loops JoinsNested Loops Joins
• Block nested loop join
NESTED LOOPS
TABLE ACCESS FULL OF our_outer_table
TABLE ACCESS FULL OF our_inner_table
• Index nested loop joinNESTED LOOPS
TABLE ACCESS FULL OF our_outer_table
TABLE ACCESS BY ROWID OF our_inner_table
INDEX RANGE SCAN OF inner_table_index
Nested Loops JoinsNested Loops Joins
• Select *from reserves r, sailors swhere r.sid=s.sid;
-------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE1 0 NESTED LOOPS2 1 TABLE ACCESS (FULL) OF 'RESERVES‘3 1 TABLE ACCESS (BY INDEX ROWID) OF 'SAILORS‘4 3 INDEX (UNIQUE SCAN) OF 'SYS_C00628777' (UNIQUE)
When Are Nested Loops When Are Nested Loops Joins Used?Joins Used?
• If tables are of unequal size
• If results should be returned
online
Hash Join PlanHash Join Plan
HASH JOINTABLE ACCESS FULL OF table_ATABLE ACCESS FULL OF table_B
When Are Hash Joins When Are Hash Joins Used?Used?
• If tables are small
• If results should be returned online
Sort-Merge Join PlanSort-Merge Join Plan
MERGE JOINSORT JOINTABLE ACCESS FULL OF table_ASORT JOINTABLE ACCESS FULL OF table_B
When Are Sort/Merge Joins When Are Sort/Merge Joins Used?Used?
• Performs badly when tables are
of unequal size. Why?
Hint Examples for JoinsHint Examples for Joins
Select /*+ USE_NL (sailors) */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;
Select /*+ USE_MERGE (sailors, reserves) */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;
Select /*+ USE_HASH */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;
inner table
XML (Extensible Markup XML (Extensible Markup Language) Language)
andand
the Semi-Structured Data Modelthe Semi-Structured Data Model
MotivationMotivation
• We have seen that relational databases
are very convenient to query. However:
– There is a LOT of data not in relational
databases!!
• Perhaps the most widely accessed
database is the web, and it certainly
isn’t a relational database.
Querying the WebQuerying the Web
• The web can be queried using a search engine, however, we can’t ask questions like:– What is the lowest price for which a Jaguar
is sold on the web?
• Problems:– There are no facilities for asking complex
questions, such as aggregation of data
Understanding the WebUnderstanding the Web
• In order to query the web, we must be
able to understand it.
• 2 Computer Science Approaches:
– Artificial Intelligence Approach
– Database Approach
Database ApproachDatabase Approach
“The web is unstructured and we will structure it”
• Sometimes problems that are very difficult can be solved easily by enforcing a standard
• Encourage the use of XML as a standard for data exchange on the web
<addresses >
<person friend="yes">
<name> Jeff Cohen</name>
<tel> 04-828-1345 </tel>
<tel> 054-470-778 </tel>
<email> [email protected] </email>
</person>
<person friend="no">
<name> Irma Levy</name>
<tel> 03-426-1142 </tel>
<email>[email protected]</email>
</person>
</addresses>
Example XML DocumentExample XML Document
Opening Tag
AttributeElement
Closing Tag
Very Unstructured XMLVery Unstructured XML
<?xml version=“1.0”?>
<DamageReport>
The insured’s <Vehicle Make = “Toyota”>
Corolla </Vehicle> broke through the guard rail and plummeted into the ravine. The cause was determined to be <Cause>faulty brakes </Cause>. Amazingly there were no casualties.
</DamageReport>
XML Vs. HTMLXML Vs. HTML
• XML and HTML are brothers. They are both
special cases of SGML.
• HTML has specific tag and attribute names.
These are associated with a specific meaning
• XML can have any tag and attribute name.
These are not associated with any meaning
• HTML is used to specify visual style
• XML is used to specify meaning
Characteristics of Characteristics of Semistructured DataSemistructured Data
(From http://www2.cs.uh.edu/~ceick/6340/intro-xml.ppt)
• Missing or additional attributes
• Multi-valued attributes
• Different types in different objects
• Heterogeneous collections
Self-describing, irregular data, no a priori structure
Relational vs Semi-Relational vs Semi-Structured Structured
RelationalSemi-Structured
Abstract
Model
Sets of
tuples
Labeled Directed
Graph
Concrete
Model
TablesXML Documents
Standard
for
Storing
Data
Data Exchange
Separating Content
from Style
Data ExchangeData Exchange
• Problem: Many data sources, each of a different type (different vendor), with a different schema. – How can the data be combined and used
together?
– How can different companies collaborate on their data?
– What format should be used to exchange the data?
Separating Content from Separating Content from StyleStyle
• Web sites develop over time
• Important to separate style from data in order to allow changes to the site structure and appearance
• Using XML, we can store data alone
• CSS separates style from data only in a limited way
• Using XSL, this data can be translated into HTML
• The data can be translated differently as the site develops
Write Once Use Write Once Use EverywhereEverywhere
XML Data
XSL
WML(hand-held
devices)
XSL
HTML(web browser
XSL
TEXT(Excel)
Using XMLUsing XML
• Quering and Searching XML: There are query languages and search engines that query XML and return XML. Examples: Xpath, Xquery /SQL4X, Equix, XSEarch
• Displaying XML: An XML document can have an associated style-sheet which specifies how the document should be translated to HTML. Examples: CSS, XSL