SQLite

Check-in [efffc49baf]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Do not try to use STAT2 to refine the row estimate of a query that uses a unique or nearly-unique index.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: efffc49baf38698ed3de05d16b4261bf405d42d7
User & Date: drh 2011-07-13 18:31:10.999
Context
2011-07-15
13:43
In os_unix.c, check if the ESTALE macro is defined before using it. (check-in: 87017410f2 user: dan tags: trunk)
2011-07-13
18:31
Do not try to use STAT2 to refine the row estimate of a query that uses a unique or nearly-unique index. (check-in: efffc49baf user: drh tags: trunk)
16:03
Added the SQLITE_FCNTL_WIN32_AV_RETRY file control for configuring the retry counts and delays in the windows VFS. (check-in: 7aaf0a6ae1 user: drh tags: trunk)
Changes
Side-by-Side Diff Ignore Whitespace Patch
Changes to src/where.c.
3107
3108
3109
3110
3111
3112
3113
3114


3115
3116
3117
3118
3119

3120
3121
3122
3123
3124
3125
3126
3107
3108
3109
3110
3111
3112
3113

3114
3115
3116
3117
3118
3119

3120
3121
3122
3123
3124
3125
3126
3127







-
+
+




-
+







    nRow = (double)(aiRowEst[nEq] * nInMul);
    if( bInEst && nRow*2>aiRowEst[0] ){
      nRow = aiRowEst[0]/2;
      nInMul = (int)(nRow / aiRowEst[nEq]);
    }

#ifdef SQLITE_ENABLE_STAT2
    /* If the constraint is of the form x=VALUE and histogram
    /* If the constraint is of the form x=VALUE or x IN (E1,E2,...)
    ** and we do not think that values of x are unique and if histogram
    ** data is available for column x, then it might be possible
    ** to get a better estimate on the number of rows based on
    ** VALUE and how common that value is according to the histogram.
    */
    if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 ){
    if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 && aiRowEst[1]>1 ){
      if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){
        testcase( pFirstTerm->eOperator==WO_EQ );
        testcase( pFirstTerm->eOperator==WO_ISNULL );
        whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
      }else if( pFirstTerm->eOperator==WO_IN && bInEst==0 ){
        whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow);
      }