mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Module provides new access method. It is actually a simple Bloom filter implemented as pgsql's index. It could give some benefits on search with large number of columns. Module is a single way to test generic WAL interface committed earlier. Author: Teodor Sigaev, Alexander Korotkov Reviewers: Aleksander Alekseev, Michael Paquier, Jim Nasby
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*-------------------------------------------------------------------------
 | 
						|
 *
 | 
						|
 * blcost.c
 | 
						|
 *		Cost estimate function for bloom indexes.
 | 
						|
 *
 | 
						|
 * Copyright (c) 2016, PostgreSQL Global Development Group
 | 
						|
 *
 | 
						|
 * IDENTIFICATION
 | 
						|
 *	  contrib/bloom/blcost.c
 | 
						|
 *
 | 
						|
 *-------------------------------------------------------------------------
 | 
						|
 */
 | 
						|
#include "postgres.h"
 | 
						|
 | 
						|
#include "fmgr.h"
 | 
						|
#include "optimizer/cost.h"
 | 
						|
#include "utils/selfuncs.h"
 | 
						|
 | 
						|
#include "bloom.h"
 | 
						|
 | 
						|
/*
 | 
						|
 * Estimate cost of bloom index scan.
 | 
						|
 */
 | 
						|
void
 | 
						|
blcostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
 | 
						|
			   Cost *indexStartupCost, Cost *indexTotalCost,
 | 
						|
			   Selectivity *indexSelectivity, double *indexCorrelation)
 | 
						|
{
 | 
						|
	IndexOptInfo *index = path->indexinfo;
 | 
						|
	List	   *qinfos;
 | 
						|
	GenericCosts costs;
 | 
						|
 | 
						|
	/* Do preliminary analysis of indexquals */
 | 
						|
	qinfos = deconstruct_indexquals(path);
 | 
						|
 | 
						|
	MemSet(&costs, 0, sizeof(costs));
 | 
						|
 | 
						|
	/* We have to visit all index tuples anyway */
 | 
						|
	costs.numIndexTuples = index->tuples;
 | 
						|
 | 
						|
	/* Use generic estimate */
 | 
						|
	genericcostestimate(root, path, loop_count, qinfos, &costs);
 | 
						|
 | 
						|
	*indexStartupCost = costs.indexStartupCost;
 | 
						|
	*indexTotalCost = costs.indexTotalCost;
 | 
						|
	*indexSelectivity = costs.indexSelectivity;
 | 
						|
	*indexCorrelation = costs.indexCorrelation;
 | 
						|
}
 |