mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Bloom index contrib module
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
This commit is contained in:
48
contrib/bloom/blcost.c
Normal file
48
contrib/bloom/blcost.c
Normal file
@ -0,0 +1,48 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* 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;
|
||||
}
|
Reference in New Issue
Block a user