add pathkeys description.
This commit is contained in:
parent
67fd67f53a
commit
9188aab758
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.1 1999/02/20 15:27:42 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.2 1999/02/20 16:28:20 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -25,7 +25,6 @@
|
||||
#include "optimizer/joininfo.h"
|
||||
#include "optimizer/ordering.h"
|
||||
|
||||
|
||||
static int match_pathkey_joinkeys(List *pathkey, List *joinkeys,
|
||||
int outer_or_inner);
|
||||
static bool joinkeys_pathkeys_match(List *joinkeys, List *pathkey,
|
||||
@ -35,6 +34,29 @@ static List *new_join_pathkey(List *subkeys, List *considered_subkeys,
|
||||
static List *new_matching_subkeys(Var *subkey, List *considered_subkeys,
|
||||
List *join_rel_tlist, List *joinclauses);
|
||||
|
||||
|
||||
/*
|
||||
* Explanation of Path.pathkeys
|
||||
*
|
||||
* This structure is a List of List of Var nodes that represent the sort
|
||||
* order of the result generated by the Path.
|
||||
*
|
||||
* In single/base relation RelOptInfo's, the Path's represent various ways
|
||||
* of generate the relation. Sequential scan Paths have a NIL pathkeys.
|
||||
* Index scans have Path.pathkeys that represent the chosen index. A
|
||||
* single-key index pathkeys would be { {tab1_indexkey1} }. The pathkeys
|
||||
* entry for a multi-key index would be { {tab1_indexkey1}, {tab1_indexkey2} }.
|
||||
*
|
||||
* Multi-relation RelOptInfo Path's are more complicated. Mergejoins are
|
||||
* only performed with equajoins("="). Because of this, the multi-relation
|
||||
* path actually has more than one ordering. For example, a mergejoin Path
|
||||
* of "tab1.col1 = tab2.col1" would generate a pathkeys of
|
||||
* { {tab1.col1, tab2.col1} }. This allows future joins to use either Var
|
||||
* as a pre-sorted key to prevent Mergejoins from having to re-sort the Path.
|
||||
* They are equal, so they are both primary sort keys. This is why pathkeys
|
||||
* is a List of Lists.
|
||||
*/
|
||||
|
||||
/****************************************************************************
|
||||
* KEY COMPARISONS
|
||||
****************************************************************************/
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: relation.h,v 1.26 1999/02/18 00:49:38 momjian Exp $
|
||||
* $Id: relation.h,v 1.27 1999/02/20 16:28:20 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -142,9 +142,10 @@ typedef struct Path
|
||||
|
||||
PathOrder *pathorder;
|
||||
|
||||
List *pathkeys; /* This is a List of List of Var nodes.
|
||||
* It is a List of Lists because of multi-key
|
||||
* indexes.
|
||||
List *pathkeys; /*
|
||||
* This is a List of List of Var nodes.
|
||||
* See the top of optimizer/path/pathkeys.c
|
||||
* for more information.
|
||||
*/
|
||||
Cost outerjoincost;
|
||||
Relids joinid;
|
||||
|
Loading…
x
Reference in New Issue
Block a user