Patent Publication Number: US-11392572-B2

Title: Selectivity estimation using non-qualifying tuples

Description:
BACKGROUND 
     Modern database systems receive database queries from applications. The database queries specify particular data of one or more data sources. A database system determines a query execution plan based on a received database query and executes the query execution plan against the data sources to generate a result set. 
     A database system typically includes a query optimizer which selects one of several possible query execution plans for executing a query. For example, the query optimizer may determine an estimated cost of each of the several query execution plans and select a query execution plan associated with a smallest cost. The estimated costs may be determined in part based on database statistics. One such statistic is the estimated selectivity of the predicates of the received query. 
     Selectivity refers to a percentage of records of a table which are selected by the query predicates. Cardinality is determined by multiplying the selectivity by the number of records in the table. In order to estimate the selectivity/cardinality of particular query predicates for table R, the query may be executed against a random sampling of the records of table R and the number of sample records selected by the query is determined. The selected number is divided by the sample size to determine an estimated selectivity of the query on table R. An estimated cardinality for table R may then be determined by multiplying the estimated selectivity by a size of R. This technique is insufficient if the query selects no records of the sample table. 
     Conventional methods for addressing the above scenario is to determine a selectivity for each predicate of the query and to multiply the determined selectivities. The foregoing methods are often inaccurate, resulting in inaccurate determinations of execution plan costs and subsequent selection of a less-desirable query execution plan. Systems are desired to improve selectivity estimates. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a block diagram of a system to estimate selectivity of a query on a table according to some embodiments. 
         FIG. 2  is a block diagram of a database system according to some embodiments. 
         FIG. 3  comprises a flow diagram to generate a sample table according to some embodiments. 
         FIG. 4  depicts characteristics of a sample table according to some embodiments. 
         FIG. 5  illustrates adjustment of estimated selectivities based on external information and relative numbers of observations according to some embodiments. 
         FIG. 6  illustrates a sample table and corresponding bit vectors according to some embodiments. 
         FIGS. 7A and 7B  comprises a flow diagram to estimate selectivity of a query on a table according to some embodiments. 
         FIG. 8  illustrates bit vectors of a sample table corresponding to each predicate of a query according to some embodiments. 
         FIG. 9  illustrates combination of bit vectors of a sample table according to some embodiments. 
         FIG. 10  illustrates combination of bit vectors of a sample table according to some embodiments. 
         FIG. 11  illustrates combination of bit vectors of a sample table according to some embodiments. 
         FIG. 12  comprises pseudo code to balance selectivity estimates according to some embodiments. 
         FIG. 13  comprises pseudo code to estimate selectivity of a conjunction of predicates according to some embodiments. 
         FIG. 14  is a block diagram of a database node according to some embodiments. 
     
    
    
     DETAILED DESCRIPTION 
     The following description is provided to enable any person in the art to make and use the described embodiments and sets forth the best mode contemplated for carrying out some embodiments. Various modifications, however, will be readily apparent to those in the art. 
     Some embodiments provide improved estimates of selectivity via a statistical model which captures deviations between true and observed correlations of predicate selectivities. The statistical model allows balancing between the certainty of partial observations and the uncertainty of selectivities that cannot be modeled due to limitations in sampling sizes (i.e., zero qualifying tuples). Accordingly, in a zero qualifying tuple case, an initial selectivity estimate is determined and then adjusted based on the above-mentioned balancing. 
     Some embodiments may also provide improved estimates of selectivity in cases where the sample includes qualifying tuples and the true selectivity of a query predicate on the source table is known. Selectivities of query sub-expressions are determined in a traditional manner and these selectivities are adjusted in view of an estimated selectivity of a predicate determined based on the sample, the true selectivity of the predicate received from external sources, and a statistical model which incorporates observed correlations of predicate selectivities. The adjusted selectivities may then be used to estimate a selectivity of the full query on the source table. 
     More specifically, embodiments use partial correlations to improve the estimation accuracy in the case of zero qualifying tuples, exploiting statistical properties and Bayes&#39; theorem:
 
 p ( A )= p ( A|B ) p ( B )+ p ( A| B   ) p (   B   ),
 
where p( B )=1−p(B). When no sample tuple qualifies, the traditional estimate implies p(A|B)=0 and p(A| B )&gt;0, if p(A)&gt;0. However, using an unbiased estimate for p(A|B) in the zero qualifying tuple case introduces an inconsistency in Bayes&#39; theorem. Both conditionals p(A|B) and p(A| B ) can then be adjusted according to their respective certainty to satisfy the equation and resolve the inconsistency. The respective certainties are modeled using the Beta distribution B, which is a continuous probability density function with two shape parameters (a, b).
 
     The Beta distribution may be derived for qualifying samples k≥1. Some embodiments further introduce an unbiased estimate for the zero qualifying tuple case and determine specific shape parameters in terms of the hypergeometric distribution. The inconsistency is resolved by adjusting the estimate based on the respective shape parameters, and a selectivity is derived using the adjusted estimate. Embodiments are further applicable to conjunctions including an arbitrary number of predicates. 
       FIG. 1  is a block diagram of system  100  according to some embodiments. The illustrated elements of system  100  may be implemented using any suitable combination of computing hardware and/or software that is or becomes known. In some embodiments, two or more elements of system  100  are implemented by a single computing device. One or more elements of system  100  may be implemented as a cloud service (e.g., Software-as-a-Service, Platform-as-a-Service). 
     Statistics server  110  determines an estimated selectivity of query  120  on table  130  based on sample table  140 . Sample table  140  includes a subset of records of table  130  and may be generated using any sampling method that is or becomes known. Although embodiment are described herein with respect to a sample taken over a database table, embodiments may also be utilized to analyze a sample taken over a database view. 
     In some embodiments, statistics server  110  executes query  120  against sample table  140  and determines that query  120  selects very few or zero records of sample table  140 . Statistics server  110  may generate an initial estimate of the selectivity of query  120  and then adjust the estimate based on a relative number of observations of two or more sub-expressions of query  120  within sample table  140 . In other embodiments, the initial estimate is based on a significant number of selected records, but is adjusted based on externally-received information (e.g., an actual selectivity of a query predicate on table  130 ) and on a relative number of observations of two or more sub-expressions of query  140  within sample table  120 . 
       FIG. 2  is a block diagram of a distributed architecture which may determine query selectivities based on sample tables according to some embodiments. Embodiments are not limited to the  FIG. 2  architecture. 
     Generally, server node  200  receives a query from client applications  230  and  240  and returns results thereto based on data stored within node  200 . Node  200  executes program code to provide an application server and query processor  220 . The application server provides services for executing server applications. For example, Web applications executing on an application server may receive HyperText Transfer Protocol (HTTP) requests from client applications  240  as shown in  FIG. 2 . 
     Query processor  220  contains the actual stored data and engines for processing the data. Query processor  220  is responsible for processing Structured Query Language (SQL) and Multi-Dimensional eXpression (MDX) statements and may receive such statements directly from client applications  230 . 
     Query processor  220  includes a query optimizer for use in determining query execution plans and a statistics server for determining statistics for estimating query execution plan costs. The statistics server may generate such statistics as described herein based on stored sample tables. For example, in response to reception of a query on a stored table (or view) of server node  200 , the statistics server may estimate selectivity of the query on the table (or view) based on a pre-generated and stored sample table which corresponds to the table (or view). According to some embodiments, the statistics server of query processor  220  comprises an implementation of statistics server  110  to generate such estimates. 
     In some embodiments, the data of server node  200  may comprise one or more of conventional tabular data, row-based data, column-based data, and object-based data. Moreover, the data may be indexed and/or selectively replicated in an index to allow fast searching and retrieval thereof. Server node  200  may support multi-tenancy to separately support multiple unrelated clients by providing multiple logical database systems which are programmatically isolated from one another. 
     Server nodes  200  may implement an “in-memory” database, in which a full database stored in volatile (e.g., non-disk-based) memory (e.g., Random Access Memory). The full database may be persisted in and/or backed up to fixed disks (not shown). Embodiments are not limited to an in-memory implementation. For example, data may be stored in Random Access Memory (e.g., cache memory for storing recently-used data) and one or more fixed disks (e.g., persistent memory for storing their respective portions of the full database). 
       FIG. 3  comprises a flow diagram of process  300  according to some embodiments. In some embodiments, various hardware elements of server node  200  execute program code to perform process  300 . Process  300  and all other processes mentioned herein may be embodied in computer-executable program code read from one or more of non-transitory computer-readable media, such as a hard disk drive, a volatile or non-volatile random access memory, a DVD-ROM, a Flash drive, and a magnetic tape, and then stored in a compressed, uncompiled and/or encrypted format. In some embodiments, hard-wired circuitry may be used in place of, or in combination with, program code for implementation of processes according to some embodiments. Embodiments are therefore not limited to any specific combination of hardware and software. 
     A query on a table is initially determined at S 310 . In the present example, the query includes a first predicate and a second predicate. The query may include additional predicates, as will be explained below. Next, at S 320 , a sample of the table is determined using any technique that is or becomes known. 
     Let R be a set of tuples defining a table or view. A sample S⊆R may be generated by drawing tuples from R uniformly at random and without replacement. The number of tuples in R is denoted by n:=|R| and the sample size is denoted by m:=|S|. The determined query q is defined as a conjunction of r simple predicates q:=p 1 ∧p 2  . . . ∧p r . 
     The result size of evaluating query q on relation R is defined as l:=|R q |, corresponding to SELECT COUNT(*) FROM R WHERE q. Analogously, the result size of evaluating query q on sample S is k:=|S q |. The total number of samples is given by the binomial coefficient 
               (         n           m         )               
and the total number of samples of size m with exactly k qualifying tuples is
 
                 (           n   -   l               m   -   k           )     ⁢     (         l           k         )       .         
Since every sample is equally likely, the probability of observing k qualifying sample tuples is:
 
     
       
         
           
             
               P 
               ⁡ 
               
                 ( 
                 
                   n 
                   , 
                   m 
                   , 
                   k 
                   , 
                   l 
                 
                 ) 
               
             
             ≈ 
             
               
                 
                   ( 
                   
                     
                       
                         
                           n 
                           - 
                           l 
                         
                       
                     
                     
                       
                         
                           m 
                           - 
                           k 
                         
                       
                     
                   
                   ) 
                 
                 ⁢ 
                 
                   ( 
                   
                     
                       
                         l 
                       
                     
                     
                       
                         k 
                       
                     
                   
                   ) 
                 
               
               
                 ( 
                 
                   
                     
                       n 
                     
                   
                   
                     
                       m 
                     
                   
                 
                 ) 
               
             
           
         
       
     
     Accordingly, given k qualifying sample tuples in sample S, the number l of qualifying tuples of relation R may be estimated as 
               l   =     n   ⁢     k   m         ,     where   ⁢     k   m             
is the selectivity of query q on sample S.
 
     A first conditional probability is determined at S 330 . The first conditional probability is a probability of selecting a tuple of the sample in which the first predicate and the second predicate are True. For example, it will be assumed that the source table is a relation R containing columns associated with car brand and car color. A sample of the source table is acquired at S 320 .  FIG. 4  illustrates characteristics  400  of the sample, including sample size m=110, number of observations of “Audi” in the brand column (i.e., 55), and number of observations of “Blue” in the color column (i.e., 10). Based on the sample size m=110 and number of observations of “Audi” (i.e., 55), characteristics  400  indicate that half of the cars are Audis, hence p(Audi)=0.5. 
     Characteristics  400  also indicate the conditional probability p(Audi|Blue), which is the probability of observing a tuple having the first predicate Audi in a sample prefiltered by the second predicate color=Blue. Specifically, 5 out of 10 Blue cars are also Audis and the first conditional probability p(Audi|Blue)=0.5. 
     A second conditional probability is determined at S 340 . The second conditional probability is a probability of selecting a tuple of the sample in which the first predicate is True and the second predicate is False. According to characteristics  400 , 50 out of 100 tuples include Audi but a different color than Blue and therefore the second conditional probability p(Audi| Blue )=0.5. 
     Next, at S 350 , the first conditional probability is adjusted. The first conditional probability is adjusted based on a number of tuples in the sample in which the second predicate is True, a number of tuples in the sample in which the second predicate is not True, and a number of tuples in the sample in which the first predicate is True and the second predicate is not True. 
     The adjustment at S 350  takes into account a relative number of observations underlying each estimated probability, under the assumption that more observations corresponds to greater certainty. For example, both observed conditional probabilities p(Audi|Blue) and p(Audi| Blue ) have the same expected value of 0.5. However, since there are more observations of tuples satisfying Audi| Blue , it is assumed that the real probability {tilde over (p)}(Audi| Blue ) with respect to source table R deviates less from p(Audi| Blue ) than does real probability {tilde over (p)}(Audi|Blue) deviate from p(Audi|Blue). 
     According to some embodiments, the conditional probabilities may be modeled by a probability density function derived from a Bernoulli process for which the integral from 0 to the observed selectivity 
             k   m         
is 0.5 and which integrates to 1. Such a function, referred to herein as Beta distribution B(a, b) with the right choice of parameters (a, b), coincides with the assumption that it is equally likely to under- and overestimate the real selectivity {tilde over (p)}(Audi|Blue) based on k. Plot  510  of  FIG. 5  illustrates such a distribution according to the present example. The x-axis represents the expected selectivity k/m and the y-axis represents the respective probability density. It can be seen that more observations lead to a steeper slope, less variance and therefore more certainty.
 
     Accordingly, the adjustment of S 350  may include balancing predicate selectivities according to their certainty. The intent of S 350  is to adjust p(Audi|Blue) and p(Audi| Blue ) such that: (1) The adjusted estimates are consistent with Bayes&#39; theorem; and (2) The adjusted estimates share the same probability of underestimating (overestimating) their true selectivity. 
     To illustrate, it is assumed that an external statistic is known, providing a true selectivity of a single query predicate on source table R. In the present example, the true selectivity {tilde over (p)}(Audi)=0.6 is assumed to be known. This value contradicts the observed sample where p(Audi)=0.5. While the observed p(Blue) might still be true despite this contradiction, the conditional probabilities p(Audi|Blue) and p(Audi| Blue ) have to be reconsidered in view thereof. Using Bayes&#39; theorem for conditionals, the single predicate selectivity may be connected to the observed correlations as follows: p(A)=p(A|B)p(B)+p(A| B )p( B ), with p( B )=1−p(B). 
     Adjustments according to the present example are depicted in diagram  520  of  FIG. 5 , which shows that more observations result in more certainty, which in turn results in less adjustment to a corresponding distribution. The uncertainty is balanced by equally distributing the probability mass among the two estimates. The beta distribution B enables integration of external information with sampling data to consistently re-adjust the combined selectivity estimate. 
     Derivation of the beta distribution B according to some embodiments is now described. Let S=s 1 , . . . , s m  be the sample, where s 1 , . . . , s m  are the respective tuples and q a query predicate. A bitvector X= x 1 , . . . , x m    can be derived from S by evaluating q over S. The i th  entry in X is set to 1 if and only if q satisfies the i th  sample tuple from S. Traditional sampling based estimators would terminate at this point and return the estimate 
             p   =       k   m     .           
However, embodiments are not only interested in the point estimate but also in the likelihood of the true selectivity {tilde over (p)} deviating from p. Since the real fraction of satisfying tuples {tilde over (p)} is unknown, it will be treated as a random variable of a function depending on X. In particular, the conditional density function ƒ ({tilde over (p)}=z|X) is desired, with Pr[(a≤{tilde over (p)}≤b)]=∫ a   b  ƒ({tilde over (p)}=z|X)dz which is derived as follows.
 
     First, the conditional probability is transformed using Bayes&#39; rule: 
     
       
         
           
             
               f 
               ⁡ 
               
                 ( 
                 
                   
                     p 
                     ˜ 
                   
                   = 
                   
                     z 
                     | 
                     X 
                   
                 
                 ) 
               
             
             = 
             
               
                 P 
                 ⁢ 
                 
                   r 
                   ⁡ 
                   
                     [ 
                     
                       
                         X 
                         | 
                         
                           p 
                           ˜ 
                         
                       
                       = 
                       z 
                     
                     ] 
                   
                 
                 ⁢ 
                 
                   f 
                   ⁡ 
                   
                     ( 
                     z 
                     ) 
                   
                 
               
               
                 
                   ∫ 
                   0 
                   1 
                 
                 ⁢ 
                 
                   P 
                   ⁢ 
                   
                     r 
                     ⁡ 
                     
                       [ 
                       
                         
                           X 
                           | 
                           
                             p 
                             ˜ 
                           
                         
                         = 
                         y 
                       
                       ] 
                     
                   
                   ⁢ 
                   
                     f 
                     ⁡ 
                     
                       ( 
                       y 
                       ) 
                     
                   
                   ⁢ 
                   d 
                   ⁢ 
                   y 
                 
               
             
           
         
       
     
     Because m&lt;&lt;n holds, and the sample tuples are selected independently and uniformly at random, the probability Pr[X|{tilde over (p)}=z] can be modeled as Bernoulli process.
 
 Pr [ X|{tilde over (p)}=z ]= z   k (1− z ) m-k  
 
The function ƒ(z) is a probability distribution independent of X, which may be referred to as prior distribution. By setting ƒ(z)∝z −α (1−z) −α , α∈(0,1), the following probability density function conditioned on X is obtained:
 
     
       
         
           
             
               f 
               ⁡ 
               
                 ( 
                 
                   
                     p 
                     ˜ 
                   
                   = 
                   
                     z 
                     | 
                     X 
                   
                 
                 ) 
               
             
             = 
             
               
                 
                   
                     z 
                     
                       k 
                       - 
                       α 
                     
                   
                   ⁡ 
                   
                     ( 
                     
                       1 
                       - 
                       z 
                     
                     ) 
                   
                 
                 
                   m 
                   - 
                   k 
                   - 
                   α 
                 
               
               
                 
                   ∫ 
                   0 
                   1 
                 
                 ⁢ 
                 
                   
                     
                       
                         y 
                         
                           k 
                           - 
                           α 
                         
                       
                       ⁡ 
                       
                         ( 
                         
                           1 
                           - 
                           y 
                         
                         ) 
                       
                     
                     
                       m 
                       - 
                       k 
                       - 
                       α 
                     
                   
                   ⁢ 
                   d 
                   ⁢ 
                   y 
                 
               
             
           
         
       
     
     This is known as the beta distribution B with shape parameters (a, b)=(k+1−α,m−k+1). The denominator of the above is independent of z and can be seen as a normalizing constant. Since the equation is a probability density function and 0≤z≤1, ∫ 0   1  ƒ({tilde over (p)}=z|X)dz=1 must hold true. Narrowing the integral&#39;s upper bound leads to the cumulative beta distribution (CDF):
 
CDF( x,B ( a,b ))=∫ 0   x ƒ( {tilde over (p)}=z|X ) dz= 1−∫ x   1 ƒ( {tilde over (p)}=z|X ) dz  
 
     The cumulative distribution therefore describes how likely {tilde over (p)} is underestimated (overestimated) given X. Since 
             p   =     k   m           
is expected to be the median, α is sought such that:
 
     
       
         
           
             
               C 
               ⁢ 
               D 
               ⁢ 
               
                 F 
                 ⁡ 
                 
                   ( 
                   
                     x 
                     , 
                     
                       B 
                       ⁡ 
                       
                         ( 
                         
                           a 
                           , 
                           b 
                         
                         ) 
                       
                     
                   
                   ) 
                 
               
             
             = 
             
               
                 
                   ∫ 
                   0 
                   x 
                 
                 ⁢ 
                 
                   
                     f 
                     ⁡ 
                     
                       ( 
                       
                         
                           p 
                           ˜ 
                         
                         = 
                         
                           z 
                           | 
                           X 
                         
                       
                       ) 
                     
                   
                   ⁢ 
                   d 
                   ⁢ 
                   z 
                 
               
               = 
               
                 
                   
                     
                       ∫ 
                       x 
                       1 
                     
                     ⁢ 
                     
                       
                         f 
                         ⁡ 
                         
                           ( 
                           
                             
                               p 
                               ˜ 
                             
                             = 
                             
                               z 
                               | 
                               X 
                             
                           
                           ) 
                         
                       
                       ⁢ 
                       dz 
                     
                   
                   ⇔ 
                   
                     P 
                     ⁢ 
                     
                       r 
                       ⁡ 
                       
                         [ 
                         
                           
                             
                               p 
                               ˜ 
                             
                             ≤ 
                             
                               k 
                               m 
                             
                           
                           | 
                           X 
                         
                         ] 
                       
                     
                   
                 
                 = 
                 
                   
                     Pr 
                     ⁡ 
                     
                       [ 
                       
                         
                           
                             p 
                             ˜ 
                           
                           ≥ 
                           
                             k 
                             m 
                           
                         
                         | 
                         X 
                       
                       ] 
                     
                   
                   = 
                   
                     
                       0.5 
                       ⇔ 
                       
                         median 
                         ⁡ 
                         
                           ( 
                           
                             B 
                             ⁡ 
                             
                               ( 
                               
                                 a 
                                 , 
                                 b 
                               
                               ) 
                             
                           
                           ) 
                         
                       
                     
                     = 
                     
                       k 
                       m 
                     
                   
                 
               
             
           
         
       
     
     A good closed form approximation of the median is as follows: 
     
       
         
           
             
               
                 
                   a 
                   - 
                   
                     1 
                     3 
                   
                 
                 
                   a 
                   + 
                   b 
                   - 
                   
                     2 
                     3 
                   
                 
               
               ≈ 
               
                 median 
                 ⁡ 
                 
                   ( 
                   
                     B 
                     ⁡ 
                     
                       ( 
                       
                         a 
                         , 
                         b 
                       
                       ) 
                     
                   
                   ) 
                 
               
             
             , 
             
               for 
               ⁢ 
               
                   
               
               ⁢ 
               a 
             
             , 
             
               b 
               &gt; 
               1 
             
           
         
       
       
         
           
             b 
             &gt; 
             1 
           
         
       
     
     Substituting a=k+1−α, b=m−k+1−α with α=⅔ gives: 
     
       
         
           
             
               
                 k 
                 + 
                 1 
                 - 
                 
                   2 
                   3 
                 
                 - 
                 
                   1 
                   3 
                 
               
               
                 k 
                 + 
                 1 
                 - 
                 
                   2 
                   3 
                 
                 + 
                 m 
                 - 
                 k 
                 + 
                 1 
                 - 
                 
                   2 
                   3 
                 
                 - 
                 
                   2 
                   3 
                 
               
             
             = 
             
               
                 k 
                 
                   k 
                   + 
                   m 
                   - 
                   k 
                 
               
               = 
               
                 k 
                 m 
               
             
           
         
       
     
     Given the approximation, it is concluded that for α=⅔ the median of the respective beta distribution indeed becomes 
     
       
         
           
             
               k 
               m 
             
             . 
           
         
       
     
     Since {tilde over (p)}(Audi)=0.6≠0.5=p(Audi), the above equation is no longer satisfied. S 350  involves adjusting p(Audi|Blue) and p(Audi| Blue ) in order to satisfy the equation. Treating p(A|B),p(A| B ) as variables z A|B , z A| B   gives raise to a space of solutions, where 
                 z     A   |   B       =         p   ⁡     (   A   )       -       p   ⁡     (       B   _     ⁢   z     )         A   |     B   _             p   ⁡     (   B   )           ,       z     A   |     B   _         =         p   ⁡     (   A   )       -       p   ⁡     (   B   )       ⁢     z     A   |   B             p   ⁡     (     B   _     )                 
must hold (0&lt;p(B)&lt;1). Further, let  = X A , X B    be a matrix with X A , X B  as bitvector where the i th  entry of X A  is set to 1 if and only if the i th  sample tuple is an Audi and the i th  entry of X B  is set to 1 if and only if the i th  sample tuple is a Blue. Deriving the distribution B for both conditional probabilities gives:
 
ƒ( {tilde over (p)} ( A|B )= z | )=ƒ( z   A|B   =z|X   + )= B   A|B  
 
ƒ( {tilde over (p)} ( A| B   )= z | )=ƒ( z   A| B     =z|X   − )= B   A| B   ,
 
where X +  (X − ) is the bit vector containing the i th  entry of X A  if and only if the i th  entry of X B  equals 1 (0).  FIG. 6  illustrates X A   +  and X A   −  and corresponding bit vectors X A  and X B  for a given sample table.
 
     S 350  includes solving the imposed inconsistency in a way that is most consistent with the observed sample. p(A|B)′=z A|B , p′(A| B )=z A| B   are defined as a consistent adjustment if the probability of underestimating (overestimating) p′(A|B) is equal to the probability of underestimating (overestimating) p′(A| B ). That is, a solution is desired in which:
 
 p ( A )= p ( B ) z   A|B   +p (   B   )= z   A| B   and
 
CDF( z   A|B   ,B   A|B )=CDF( z   A| B     ,B   A| B   )
 
holds.
 
     By substituting z A|B  with 
                   p   ⁡     (   A   )       -       p   ⁡     (     B   _     )       ⁢     z     A   |     B   _               p   ⁡     (   B   )         ,         
it is observed that the constrained solution to p(A)=p(B)z A|B +p( B )z A| B   is always unique. Since more observations exist for p(Audi| Blue ) than for p(Audi|Blue), the beta distribution modeled under X −  has a steeper slope than B A|B . The cumulative distribution function of B A| B   is therefore changing faster compared to CDF(z A|B , B A|B ). Due to the faster change of CDF(z A| B   , B A| B   ), less adjustment of z A| B   is needed to meet the same value as CDF(z A|B , B A|B ).
 
     Returning to process  300 , the adjusted first conditional probability is used to determine the selectivity of the query on the table at S 360 . Specifically, the adjusted first conditional probability is multiplied with the probability of selecting a tuple of the sample in which the second predicate is true. In the present example, the selectivity of query Audi and Blue is determined by multiplying adjusted p(Audi|Blue) with p(Blue). 
     Process  300  may also be used to balance the certainty of observed correlations from the sample in a case where no tuples of the sample are selected by the query. Since the sample-derived conditional probability is zero, an unbiased initial estimate for l=|R q | is determined. Second, the beta distribution is modeled with regard to l, where 
             p   =     l   n           
is the median. Next, the initial estimate is adjusted according to the certainty of the (partial) correlations given by S. In other words, the certainty and uncertainty of the observations are balanced, where the uncertainty results from the limited sample size.
 
     Providing an unbiased estimate for 
               p   0     =     l   n           
with respect to the hypergeometric distribution is not trivial when k=0. The sample is assumed to be representative but too small, i.e.
 
               0   ≤     p   0       =       l   n     &lt;     1   m             
(otherwise P 0  could have been modelled by the sample). If it were possible to observe fractions of qualifying tuples, the fraction would be expected to fall between k=0 and k=1 qualifying sample tuples. Due to the lack of additional information, k 0 =0.5 may be an initial estimate as it is equidistant from k=0 and k=1. Accordingly, the probability of seeing less than 0.5 qualifying sample tuples should be equally likely to observing more than 0.5 tuples. Therefore, given n, m, X˜hypergeometric(n, m, l) and according to the preliminary considerations l is sought such that:
 
 Pr [ X≤k   0 =0.5]≥½ and  Pr [ X≥k   0 =0.5]≥½
 
     However, X relates to a discrete distribution, and since there cannot be half a qualifying tuple and Pr[X≤k 0 =0.5]=Pr[X&lt;k=1]=Pr[X=k=0], the above equation would hold true for every k 0 ∈[0,1). In this case there is no unique solution and 0.5 refers to a so called weak median [13]. 
     However, for {tilde over (x)}˜hypergeometric(n, 2m, l) it can be assumed that
 
 Pr [ {tilde over (X)}≤k= 1]≥½ and  Pr [ {tilde over (X)}≥k= 1]≥½
 
⇐ Pr [ {tilde over (X)}=k= 0]= P ( n, 2 m,k= 0, l )=½
 
     Therefore, by doubling the sample size k=1 becomes the strong median of {tilde over (X)}, giving raise to a unique solution of l. Accordingly, a number of qualifying relation tuples is determined which provides a 50% chance of observing at least one qualifying sample tuple when considering a sample twice the size. Given m, n, a solution to P(n, 2m, k=0, l)=0.5 is given by: 
     
       
         
           
             l 
             = 
             
               n 
               ⁢ 
               
                 
                   ln 
                   ⁡ 
                   
                     ( 
                     2 
                     ) 
                   
                 
                 
                   2 
                   ⁢ 
                   m 
                 
               
             
           
         
       
     
     An initial and unbiased estimate for the fraction of qualifying tuples in view of a sample having no qualifying tuples is 
               p   0     =         ln   ⁡     (   2   )         2   ⁢   m       .           
Accordingly, the first conditional probability determined at S 330  is
 
               p   0     =       ln   ⁡     (   2   )         2   ⁢   m             
in the case or a sample having no qualifying tuples.
 
     In order to adjust this first conditional probability at S 350  according to partially observed correlations, it is first modeled as a distribution as described above. When no sample tuple qualifies for the given predicate, a beta distribution B 0 =B(a, b) is determined with 
     
       
         
           
             
               median 
               ⁡ 
               
                 ( 
                 
                   B 
                   ⁡ 
                   
                     ( 
                     
                       a 
                       , 
                       b 
                     
                     ) 
                   
                 
                 ) 
               
             
             = 
             
               
                 p 
                 0 
               
               = 
               
                 
                   
                     ln 
                     ⁡ 
                     
                       ( 
                       2 
                       ) 
                     
                   
                   
                     2 
                     ⁢ 
                     m 
                   
                 
                 . 
               
             
           
         
       
     
     The closed form approximation for the median noted above may be used to derive the respective shape parameters (a, b). The approximation is however constrained by a, b&gt;1, and k=0 is a special case in which the median needs to be 
               ln   ⁡     (   2   )         2   ⁢   m           
instead of
 
               k   m     .         
Substituting a according to the approximation gives
 
               a   =           ln   ⁡     (   2   )       2     +   1   -   α     =           ln   ⁡     (   2   )       2     +     1   3       &lt;   1         ,         
thus violating the constraint and leading to a significant approximation error of ˜10%. The inventors have numerically determined that a 0 =0.634, b 0 =m provides a consistently accurate approximation of the beta distribution shape parameters for the zero tuple case, where
 
             median   ⁢         (     B   ⁡     (         a   0     =       0   .   6     ⁢   34       ,       b   0     =   m       )       )     ≈       ln   ⁡     (   2   )         2   ⁢   m         =       p   0     .             
It can be shown numerically that using a 0 =0.634, b 0 =m provides a relative error less than 1% for m&gt;1, which is rapidly decreasing (less than 0.1% for m≥10).
 
     The above discussion provides an unbiased initial estimate for non-qualifying samples where 0.5 tuples are the strong median. Considering one qualifying tuple as a strong median, it becomes straightforward to apply 
             l   =     n   ⁢       ln   ⁡     (   2   )       m             
directly. This provides a 50% chance of observing a non-qualifying sample and a 50% chance of observing at least one qualifying tuple, i.e.:
 
     
       
         
           
             
               P 
               ⁡ 
               
                 ( 
                 
                   n 
                   , 
                   m 
                   , 
                   
                     k 
                     = 
                     0 
                   
                   , 
                   l 
                 
                 ) 
               
             
             = 
             
               
                 P 
                 ⁡ 
                 
                   ( 
                   
                     n 
                     , 
                     m 
                     , 
                     
                       k 
                       ≥ 
                       1 
                     
                     , 
                     l 
                   
                   ) 
                 
               
               = 
               
                 
                   
                     0 
                     . 
                     5 
                   
                   ⇔ 
                   l 
                 
                 = 
                 
                   n 
                   ⁢ 
                   
                     
                       ln 
                       ⁡ 
                       
                         ( 
                         2 
                         ) 
                       
                     
                     m 
                   
                 
               
             
           
         
       
     
     The following summarizes the shape parameters (a, b) for the beta distribution depending on the (partial) observation: 
     
       
         
           
             
               ( 
               
                 a 
                 , 
                 b 
               
               ) 
             
             = 
             
               ( 
               
                 
                   
                     
                       ( 
                       
                         
                           k 
                           + 
                           
                             1 
                             3 
                           
                         
                         , 
                         
                           m 
                           - 
                           k 
                           + 
                           
                             1 
                             3 
                           
                         
                       
                       ) 
                     
                   
                   
                     
                       
                         
                           if 
                           ⁢ 
                           
                               
                           
                           ⁢ 
                           k 
                         
                         ≥ 
                         1 
                       
                       , 
                       
                         m 
                         ≥ 
                         1 
                       
                     
                   
                 
                 
                   
                     
                       ( 
                       
                         
                           
                             a 
                             0 
                           
                           = 
                           
                             
                               0 
                               . 
                               6 
                             
                             ⁢ 
                             3 
                             ⁢ 
                             4 
                           
                         
                         , 
                         
                           
                             b 
                             0 
                           
                           = 
                           m 
                         
                       
                       ) 
                     
                   
                   
                     
                       
                         
                           if 
                           ⁢ 
                           
                               
                           
                           ⁢ 
                           k 
                         
                         = 
                         0 
                       
                       , 
                       
                         m 
                         ≥ 
                         1 
                       
                     
                   
                 
                 
                   
                     
                       ( 
                       
                         1 
                         , 
                         1 
                       
                       ) 
                     
                   
                   
                     
                       
                         
                           if 
                           ⁢ 
                           
                               
                           
                           ⁢ 
                           k 
                         
                         = 
                         0 
                       
                       , 
                       
                         m 
                         = 
                         0 
                       
                     
                   
                 
               
               ) 
             
           
         
       
     
     The above provides a beta distribution that models the uncertainty of an initial estimate p 0  that can not be directly observed by the sample. Instead of setting p 0 =0 as observed in the zero qualifying tuple case, 
               p   0     =       ln   ⁡     (   2   )         2   ⁢   m             
is used. The use of
 
               p   0     =       ln   ⁡     (   2   )         2   ⁢   m             
introduces an inconsistency to the above equation p(A)=p(A|B)p(B)+p(A| B )p( B ). p 0  may then be adjusted to resolve the inconsistency based on the certainty of observable correlations and therefore balance the uncertainty and certainty.
 
     Returning to the prior example of  FIGS. 4 and 5 , it will be assumed that the sample does not include any tuples satisfying a query for Blue Audi. In particular, 55 of 110 cars are Audis but with a color different than Blue and 10 cars are Blue but not Audis. The uncertainty of p(Audi|Blue) can then be modeled at S 330  as the conditional density function ƒ({tilde over (p)} 0 (A|B)=z| )=ƒ(z A|B =z|X + )=B(0.634, 10). 
     Based on the example, the shape parameters for the second conditional density function (i.e., beta distribution) are derived at S 340  as:
 
( a,b )=( k   A B   +⅓ ,m   A B     −k   A B   +⅓)=(55+⅓,100−55+⅓)
 
     Accordingly, the second conditional density function p(Audi| Blue ) is:
 
ƒ( {tilde over (p)} ( A| B   )= z | )=ƒ= z|X   − )= B (55. 33 ,45. 33 ),
 
with  = X A , X B   , where X A , X B  are bit vectors of the respective sample columns and X + , X −  are separated from X A  with respect to the boolean factor Blue of X B .
 
     Next, at S 350  both conditional probabilities are treated as variables z AB , z A B   to seek a solution to p(Audi)=z A|B p(Blue)+z A| B   p( Blue ) under the condition:
 
CDF( z   A|B   ,B (0.634,10))=CDF( z   A| B     ,B (55. 33 ,45. 33 ))
 
     Solving p(Audi)=z A|B p(Blue)+z A| B   p( Blue ) in this manner gives the adjusted conditional probability p 0 ,(Audi|Blue)=z AB . The fraction of Blue Audis in the sample and therefore the respective predicate selectivity may then be determined at S 360  by: p 0 ,(Audi, Blue)=z A|B p(Blue)=p 0 , (Audi|Blue)p(Blue). As a result, the estimated number of tuples of the source table which satisfy Audi and Blue is n*p 0 , (Audi, Blue). 
     As stated before, p(A|B) and p(A| B ) can be treated as variables z A|B , z A| B   . Either z A| B   or z A|B  may be substituted in 
                 Z     A   |   B       =         p   ⁡     (   A   )       -       p   ⁡     (     B   _     )       ⁢     z     A   |     B   _               p   ⁡     (   B   )           ,       Z     A   |     B   _         =         p   ⁡     (   A   )       -       p   ⁡     (   B   )       ⁢     z     A   |   B             p   ⁡     (     B   _     )                 
to solve p(Audi)=z A|B p(Blue)+z A| B   p( Blue ). If z A|B  is substituted by
 
                 z     s   ⁢   u   ⁢   b       =         p   ⁡     (   A   )       -       p   ⁡     (   B   )       ⁢     z     A   |   B             1   -     p   ⁡     (   B   )             ,         
the problem can be reformulated as a solution to the following equation, which depends on only one variable:
 
     
       
         
           
             
               
                 ∫ 
                 0 
                 
                   z 
                   
                     A 
                     | 
                     B 
                   
                 
               
               ⁢ 
               
                 
                   f 
                   ⁡ 
                   
                     ( 
                     
                       
                         
                           p 
                           ˜ 
                         
                         ⁡ 
                         
                           ( 
                           
                             A 
                             | 
                             B 
                           
                           ) 
                         
                       
                       = 
                       
                         z 
                         | 
                         𝕏 
                       
                     
                     ) 
                   
                 
                 ⁢ 
                 dz 
               
             
             = 
             
               
                 ∫ 
                 0 
                 
                   z 
                   
                     s 
                     ⁢ 
                     u 
                     ⁢ 
                     b 
                   
                 
               
               ⁢ 
               
                 
                   f 
                   ⁡ 
                   
                     ( 
                     
                       
                         
                           p 
                           ˜ 
                         
                         ⁡ 
                         
                           ( 
                           
                             A 
                             | 
                             
                               B 
                               _ 
                             
                           
                           ) 
                         
                       
                       = 
                       
                         z 
                         | 
                         𝕏 
                       
                     
                     ) 
                   
                 
                 ⁢ 
                 dz 
               
             
           
         
       
     
     This equation may be solved via Brent&#39;s method, which is a combination of the bisection method, the secant method and inverse quadratic interpolation. An open source implementation of via Brent&#39;s method is provided by the C++ Boost library. After solving the equation, either z A| B   or z A|B  can be back-substituted. 
     Brent&#39;s method requires as input a target function and bounds within which the minimum may be found. Some embodiments call Brent&#39;s method for two separate cases—representing both possibilities of 
                 Z     A   |   B       =         p   ⁡     (   A   )       -       p   ⁡     (     B   _     )       ⁢     z     A   |     B   _               p   ⁡     (   B   )           ,       Z     A   |     B   _         =         p   ⁡     (   A   )       -       p   ⁡     (   B   )       ⁢     z     A   |   B             p   ⁡     (     B   _     )           ,         
with each call having its own target function and bounds. According to some embodiments, the case for which the bounds are tighter is chosen for solving.
 
     The following target function ψ may be used in some embodiments:
 
ψ( z   A|B ):=((CDF( z   A|B   ,B   A|B )−CDF( z   sub   ,B   A| B   )) 2 ,
 
where the cumulative distribution function can be computed efficiently for every value of z A|B  (z sub ) by calling Boost&#39;s implementation of the incomplete beta function. However, since calculating the difference of two vastly different floating point numbers is imprecise, the following target function may be used:
 
     
       
         
           
             max 
             ⁡ 
             
               ( 
               
                 
                   
                     C 
                     ⁢ 
                     D 
                     ⁢ 
                     
                       F 
                       ⁡ 
                       
                         ( 
                         
                           
                             z 
                             
                               A 
                               | 
                               B 
                             
                           
                           , 
                           
                             B 
                             
                               A 
                               | 
                               B 
                             
                           
                         
                         ) 
                       
                     
                   
                   
                     C 
                     ⁢ 
                     D 
                     ⁢ 
                     
                       F 
                       ⁡ 
                       
                         ( 
                         
                           
                             z 
                             
                               s 
                               ⁢ 
                               u 
                               ⁢ 
                               b 
                             
                           
                           , 
                           
                             B 
                             
                               A 
                               | 
                               
                                 B 
                                 _ 
                               
                             
                           
                         
                         ) 
                       
                     
                   
                 
                 , 
                 
                     
                 
                 ⁢ 
                 
                   
                     C 
                     ⁢ 
                     D 
                     ⁢ 
                     
                       F 
                       ⁡ 
                       
                         ( 
                         
                           
                             z 
                             sub 
                           
                           , 
                           
                             B 
                             
                               A 
                               | 
                               
                                 B 
                                 _ 
                               
                             
                           
                         
                         ) 
                       
                     
                   
                   
                     C 
                     ⁢ 
                     D 
                     ⁢ 
                     
                       F 
                       ⁡ 
                       
                         ( 
                         
                           
                             z 
                             
                               A 
                               | 
                               B 
                             
                           
                           , 
                           
                             B 
                             
                               A 
                               | 
                               B 
                             
                           
                         
                         ) 
                       
                     
                   
                 
               
               ) 
             
           
         
       
     
     Some embodiments employ two approaches to narrow down the search space of Brent&#39;s method. First, both z A|B , z A| B   are substituted with their respective counterpart as in 
                 z     A   |   B       =         p   ⁡     (   A   )       -       p   ⁡     (     B   _     )       ⁢     z     A   |     B   _               p   ⁡     (   B   )           ,       z     A   |     B   _         =           p   ⁡     (   A   )       -       p   ⁡     (   B   )       ⁢     z     A   |   B             p   ⁡     (     B   _     )         .             
Second, under the assumption that the sample is accurate but unable to model the correct selectivity due to its limited size, k obs −1&lt;k true &lt;k obs +1. Substituting k with k−1, k+1 gives the respective lower and upper bound for Brent&#39;s method.
 
     In a case that the sample constrained by the predicate over attribute B is empty, i.e. 
               m   B     =     0   ⁢       (       p   B     =       ln   ⁡     (   2   )         2   ⁢   m         )     .             
Then B A|B  becomes the uniform distribution B(1,1). Since there is nothing to infer from the empty sample z A|B  is set to 0 and 1 in order to derive the lower and upper bound for z A| B   . Analogously, z A| B   is substituted in case of
 
     
       
         
           
             
               m 
               
                 B 
                 _ 
               
             
             = 
             
               0 
               ⁢ 
               
                 
                   ( 
                   
                     
                       p 
                       B 
                     
                     = 
                     
                       1 
                       - 
                       
                         
                           ln 
                           ⁡ 
                           
                             ( 
                             2 
                             ) 
                           
                         
                         
                           2 
                           ⁢ 
                           m 
                         
                       
                     
                   
                   ) 
                 
                 . 
               
             
           
         
       
     
     Considering a conjunction of two predicates (with no qualifying sample tuples), the selectivity estimation may be performed by intersecting two bit vectors and calling Brent&#39;s method with the aforementioned target function. 
     The above-described concepts may be used to estimate the combined selectivity of a conjunctive predicate, solely based on sampling. Generally, and as will be described with respect to process  700  of  FIGS. 7A and 7B , a plurality of simple predicates and a table sample are received. If the sample includes at least one tuple satisfying the full conjunction of all predicates, the estimated selectivity is 
     
       
         
           
             
               
                 
                   k 
                   m 
                 
                 ⁢ 
                 if 
                 ⁢ 
                 
                     
                 
                 ⁢ 
                 k 
               
               &gt; 
               
                 1 
                 ⁢ 
                 
                     
                 
                 ⁢ 
                 and 
                 ⁢ 
                 
                   
                     ln 
                     ⁡ 
                     
                       ( 
                       2 
                       ) 
                     
                   
                   m 
                 
                 ⁢ 
                 if 
                 ⁢ 
                 
                     
                 
                 ⁢ 
                 k 
               
             
             = 
             1. 
           
         
       
     
     If no sample tuple satisfies the full conjunction of all predicates, as many predicates as possible are combined to a subexpression which is satisfied by at least one tuple of the sample. The selectivity of the subexpression is then adjusted as described above based on the relative number of observations of the subexpression and of a next simple predicate. Next, the residual predicates are combined and connected to the previously-visited predicates by determining the selectivities of the residual subexpression and adjusting this selectivity based on the relative number of observations of each subexpression. 
     With respect to process  700 , a query on a table is determined. The table includes a plurality of columns and the query includes a plurality of predicates respectively associated with each column. The following discussion of process  700  assumes that all single predicates have at least one qualifying entry in their respective bit vector, i.e., only (partial) conjunctions lead to a null vector or no qualifying sample tuple, respectively. 
     A sample of the table is determined at S 710  as described above. Next, at S 715  a bit vector is determined for each of those columns of the sample which are associated with a predicate of the query. A bit vector for a given column includes a “1” or a “0” for each row of the sample, depending on whether the predicate associated with the given column is satisfied by the value of the column at the row.  FIG. 8  illustrates bit vectors  800  of a sample table associated with each of predicates A-G of a received query according to one example. 
     At S 720 , a bit vector of a current column (i.e., A) is intersected (i.e., logical AND) with the bit vector of a next column to generate a result bit vector.  FIG. 9  illustrates a result bit vector generated by intersecting the bit vector of column A with the bit vector of column B. Since the result bit vector is not empty (i.e., all “0”s) flow proceeds from S 730  to S 735 . At S 735 , the (partial) selectivity associated with the columns of the result bit vector is determined as the number of “1”s in the result bit vector divided by the number of tuples (i.e., rows) in the sample. 
     It is determined at S 740  that more predicate columns exist, flow returns to S 720  to intersect the current result bit vector (associated with columns A and B) with the bit vector of a next column (column C).  FIG. 10  illustrates a new result bit vector column associated with columns A, B and C. Since this result bit vector is not determined as empty at S 730 , a new selectivity is determined based on the result bit vector at S 735  and flow returns to S 720  via S 740 . 
     Generally, the consecutive bit vectors are intersected as long as qualifying entries in the result bit vector can be observed. If it is eventually determined at S 740  that no further columns exist, then the sample includes at least one qualifying tuple and the last-determined selectivity is returned. In some embodiments, if the final result bit vector indicates the presence of only one qualifying tuple in the sample, a selectivity of 
               ln   ⁡     (   2   )       m         
may be returned as described above.
 
     Returning to the example, a result bit vector is then formed at S 720  based on the result bit vector associated with columns A, B and C and the bit vector associated with column D. Since this bit vector includes all “0”s, flow proceeds from S 730  to S 750 . At S 750 , first conditional probability p A  is determined as equal to the last-determined selectivity (i.e., corresponding to the partial selectivity of the predicates associated with columns A, B and C) and second conditional probability p B  is determined as equal to the number of “1”s of the next column (column D) bit vector divided by the sample size. 
     Next, and as described above, the first conditional probability (i.e., p A =p(ABC) is adjusted at S 755  based on the number of “1”s of the result bit vector (i.e., k ABC D   =countOnes(X ABC &amp;¬X D )), the number of “1”s of the next column bit vector (i.e., m D =countOnes(X D )) and the number of “0”s of the next column bit vector (i.e., m   D   )=countOnes(¬X D )). These values provide both beta distributions B ABC|D  and B ABC| D   with the following shape parameters:
 
 B   ABC|D   =B ( a   0 =0.634, b   0   =m   D ),
 
 B   ABC|D   =B ( k   ABC D   +0. 33 , m     D     −k   ABC D   +0. 33 )
 
     As previously discussed B ABC|D , B ABC| D   may be balanced at S 855  by calling Brent&#39;s method with the respective target function so that CDF(z ADC|D , B ADC|D )=CDF(z ABC| D   , B ABC| D   ) holds. The adjusted estimate p(ABC|D)=z ABC|D  is returned, and the selectivity on columns A, B, C and D is determined at S 760  as p(ABCD)=p(ABC|D)p(D). 
     Next, p(EFG|ABCD) is estimated by connecting the residual predicates and therefore the sample columns EFG.  FIG. 11  illustrates a bit vector generated by intersecting the bit vectors of columns E, F and G. Given X EFG =X E &amp;X F &amp;X G ≠{right arrow over (0)}, some implementations may attempt to combine as many previously-visited predicates as possible. X A &amp;X B  may be prioritized over X B &amp;X C  assuming that the plan starts with the most selective and anti-correlated predicates. In the present example, X EFG &amp;X AB ≠{right arrow over (0)}, while X EFG &amp;X ABC ={right arrow over (0)}. Since X EFGABC ={right arrow over (0)} and X EFG , X ABC ≠0, it follows that that X EFG &amp;¬X ABC ≠{right arrow over (0)}. 
     At S 765 , p A2 =p(EFG), p B2 =p(ABC), and  = X EFG , X ABC   . p A2  is then adjusted at S 770  as described herein. More specifically, the first conditional probability (i.e., p A2 ) is adjusted at S 770  based on the number of “1”s of the remaining columns combined bit vector (i.e., k EFG ABC   =countOnes(X EFG ABC   )), the number of “1”s of the prior result bit vector (i.e., m ABC =countOnes(X ABC )), and the number of “0”s of the prior result bit vector (i.e., m   ABC   =countOnes(¬X ABC )). These values provide the following beta distributions:
 
 B   1   =B ( a   0 =0.634, b   0   =m   ABC ),
 
 B   2   =B ( k   EFG| ABC   +0. 33 , m   ABC   −k   EFG ABC   0. 33 ),
 
which are balanced as described above to return p(EFG|ABC). The selectivity estimate of the full conjunctive predicate then reads:
 
 p (ABCDEFG)= p ( EFG|ABC ) p ( ABC|D ) p ( D ).
 
     Instead of relying on a fixed order of predicates, the above algorithm may use a greedy heuristic. This implementation may take a set of simple predicates as input and return the enumerated predicates along with their combined selectivity. In the first phase, the predicates are enumerated according to the heuristic. If, for example, the predicates over ABC are already enumerated and adding any of the residual predicates leads to zero qualifying tuples, then the selectivity of the first subexpression that results in a non-qualifying sample is estimated. However, besides p(ABCD), estimates are provided for p(ABCE), p(ABCF) and p(ABCG). According to the heuristic, the subexpression with the best cost to selectivity ratio is selected, e.g. p(ABCD). 
     Then, assuming that qualifying tuples for the combined subexpression over EFG, p(ABCDE)=p(E|ABC)p(ABCD) and p(ABCDF), p(ABCDG) are estimated. If p(ABCDE) has been selected, the process continues with p(ABCDEF)=p(FE|ABC) (ABCD), etc., where all combinations of residual predicates (e.g., the subexpression over FE) are treated as a single predicate. 
     Enumeration is not limited to the greedy heuristic. The enumerator could separately shuffle subexpressions according to any policy while continuously proposing (partial) plans. 
       FIG. 12  comprises pseudo code to balance selectivity estimates according to some embodiments. The code receives a sample S and two conditional probabilities p(A) and p(B) and outputs an estimated correlation p(A|B). The code describes an implementation which may be employed in some embodiments of S 350 , S 755  and S 770 . 
       FIG. 13  comprises pseudo code to estimate selectivity of a conjunction of predicates according to some embodiments. The pseudo code of  FIG. 13  may therefore comprise an implementation of process  700 . As shown and noted above, execution of the pseudo code of  FIG. 13  may include execution of an algorithm such as the pseudo code of  FIG. 12  (e.g., at S 755  and S 770 ). It should be noted that the function Cnt(P A ,S) counts qualifying sample tuples for predicate P A  and corresponds to the notation countOnes(X A ) above. 
       FIG. 14  is a block diagram of server node  1400  according to some embodiments. Server node  1400  may comprise a general-purpose computing apparatus and may execute program code to perform any of the functions described herein. Server node  1400  may comprise an implementation of server node  200  in some embodiments. Server node  1400  may include other unshown elements according to some embodiments. 
     Server node  1400  includes processing unit(s)  1410  operatively coupled to communication device  1420 , data storage device  1430 , one or more input devices  1440 , one or more output devices  1450  and memory  1460 . Communication device  1420  may facilitate communication with external devices, such as an external network or a data storage device. Input device(s)  1440  may comprise, for example, a keyboard, a keypad, a mouse or other pointing device, a microphone, knob or a switch, an infra-red (IR) port, a docking station, and/or a touch screen. Input device(s)  1440  may be used, for example, to enter information into apparatus  1400 . Output device(s)  1450  may comprise, for example, a display (e.g., a display screen) a speaker, and/or a printer. 
     Data storage device  1430  may comprise any appropriate persistent storage device, including combinations of magnetic storage devices (e.g., magnetic tape, hard disk drives and flash memory), optical storage devices, Read Only Memory (ROM) devices, etc., while memory  1460  may comprise Random Access Memory (RAM). 
     Application server  1431  and query processor  1432  may each comprise program code executed by processor(s)  1410  to cause server  1400  to perform any one or more of the processes described herein. Such processes may include estimating selectivities of queries on tables  1434  based on corresponding sample tables  1433 . Embodiments are not limited to execution of these processes by a single computing device. Data storage device  1430  may also store data and other program code for providing additional functionality and/or which are necessary for operation of server  1400 , such as device drivers, operating system files, etc. 
     The foregoing diagrams represent logical architectures for describing processes according to some embodiments, and actual implementations may include more or different components arranged in other manners. Other topologies may be used in conjunction with other embodiments. Moreover, each component or device described herein may be implemented by any number of devices in communication via any number of other public and/or private networks. Two or more of such computing devices may be located remote from one another and may communicate with one another via any known manner of network(s) and/or a dedicated connection. Each component or device may comprise any number of hardware and/or software elements suitable to provide the functions described herein as well as any other functions. For example, any computing device used in an implementation some embodiments may include a processor to execute program code such that the computing device operates as described herein. 
     Embodiments described herein are solely for the purpose of illustration. Those in the art will recognize other embodiments may be practiced with modifications and alterations to that described above.