Selecting the Best Join Order : Methods Oracle Uses to Join Tables
Choose the join order that gives you least number of rows to be joined to the other tables. That is, if you’re joining three tables, the one with the more restrictive filter should be joined first to one of the other two tables.
When SQL statement includes a join between two or more tables, the order in which you join tables is extremely important.
- The driving table in a join is the first table that comes after the WHERE clause.
- The driving table in the join should contain the filter that will eliminate the most rows.
Nested loops Join
Nested Loops Joins
For each relevant row in the first table, find all matching rows in the other table.
Suppose you have a list of all public officials in your city and a telephone book for your city. How would you go about getting the names and telephone numbers of each council member?
- Go down the list of public officials
- Discard all names except council members
- Look up the remaining names in the telephone book one at a time
Sort all of the relevant rows in the first table by the join key, likewise sort the second table, and then merge the two together.
Suppose you and your fianc?e each have a huge compact disc collection. You buy a house together and decide to combine collections. How would you eliminate the duplicate CDs?
- Alphabetize each collection by artist
- Compare collections side-by-side
- Extract the discs that appear in both
Build a hash table in memory of all relevant rows from the first table. For each relevant row in the second table, probe the hash table to find the matches.
A hash join is like a nested loops join, except that preparatory work is done to one of the two tables to speed up the join process.
Consider the nested loops join example with the council members?
phone numbers, and imagine that the telephone book is not
alphabetized by name.
For each relevant row in the first table, find all matching rows in the other table by looking at the cluster index. The matching rows will probably be conveniently located in the same data block.
Consider a stack of purchase orders.
Each PO can have any number of items on it. When you pick up one PO, you have easy access to all of its items.