]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Tweaks to the index selection logic.
authordrh <drh@noemail.net>
Wed, 11 Sep 2013 03:53:22 +0000 (03:53 +0000)
committerdrh <drh@noemail.net>
Wed, 11 Sep 2013 03:53:22 +0000 (03:53 +0000)
FossilOrigin-Name: 52d52688644f635a50a60ff17b160f3affa8fa6c

manifest
manifest.uuid
src/resolve.c
src/where.c
test/analyze9.test

index 7a9888a7f680db66ce03c8250fe19309a851dcc4..c6dcacea09bd1dc9396e6edd68d48890c8b7c0ca 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\strunk\sfixes\sinto\sthe\sunlikely-func\sbranch.
-D 2013-09-10T01:53:18.529
+C Tweaks\sto\sthe\sindex\sselection\slogic.
+D 2013-09-11T03:53:22.579
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -214,7 +214,7 @@ F src/pragma.c 3aa3d8c8623b7b71c5b1bfb72dcc31fb0c25665f
 F src/prepare.c fa6988589f39af8504a61731614cd4f6ae71554f
 F src/printf.c da9119eb31a187a4b99f60aa4a225141c0ebb74b
 F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68
-F src/resolve.c 594725ba98cbe0e7de9da75c9915dc589d92bcd4
+F src/resolve.c 140c25a1aa91c460dee74a1b9e6aa5af5c98cbea
 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
 F src/select.c 9239586282bd146ec5843a2cde7d54cd7816cf78
 F src/shell.c d920a891ca09b8bd262cced7fb0ab9d723f7a747
@@ -290,7 +290,7 @@ F src/vtab.c 5a423b042eb1402ef77697d03d6a67378d97bc8d
 F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
 F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
-F src/where.c 05cf31505dd514d1e27075ae5ef23a23a3462231
+F src/where.c 6b9e2bc47dd1225d690a9c770f157693519b7391
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
 F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
@@ -308,7 +308,7 @@ F test/analyze5.test 765c4e284aa69ca172772aa940946f55629bc8c4
 F test/analyze6.test 19151da2c4e918905d2081b74ac5c4d47fc850ab
 F test/analyze7.test bb1409afc9e8629e414387ef048b8e0e3e0bdc4f
 F test/analyze8.test 093d15c1c888eed5034304a98c992f7360130b88
-F test/analyze9.test a2c83301160d4d367d4cedfa503fc0b20556c723
+F test/analyze9.test 1b9b7e9a096d1536f03d9ad7b72f638ef5669347
 F test/analyzeA.test 1a5c40079894847976d983ca39c707aaa44b6944
 F test/analyzeB.test 8bf35ee0a548aea831bf56762cb8e7fdb1db083d
 F test/async.test 1d0e056ba1bb9729283a0f22718d3a25e82c277b
@@ -1111,7 +1111,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P b65dc53415f42d8402d0ec7f4bedf59d7b39b486 48ed8b565b84c8fa7898c2f9817c01f7e9c9182e
-R 57c422fa5d2c71518d0f8dca5acd5405
+P a51d751553b14aa26912c516f60727551deb8e60
+R de20fadcbd5549c633507180f3bc907b
 U drh
-Z b21635cdf1a77e86e14dc5bd6f2adf83
+Z c7a8a684bdbfede4a4651eea6f5c0b26
index d4288fff6f29767210e4cc2318497764ed5942cd..2a7636c69035ae331c5d2242c5ad9c7a721a4427 100644 (file)
@@ -1 +1 @@
-a51d751553b14aa26912c516f60727551deb8e60
\ No newline at end of file
+52d52688644f635a50a60ff17b160f3affa8fa6c
\ No newline at end of file
index ab318be8e24b77091fdb8a564cc67a838a785bed..40acc91bc3502967df0820dab3220a24288474be 100644 (file)
@@ -705,7 +705,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
               pNC->nErr++;
             }
           }else{
-            pExpr->iTable = 75;  /* TUNING:  Default 2nd arg to unlikely() is 0.075 */
+            pExpr->iTable = 62;  /* TUNING:  Default 2nd arg to unlikely() is 0.0625 */
           }             
         }
       }
index b50851d37852dca9dca1d4d8b3c71a4203a24495..f2ecb764093adf64fdad8a56c7e385398df0549a 100644 (file)
@@ -2557,6 +2557,7 @@ static int whereRangeScanEst(
 ){
   int rc = SQLITE_OK;
   int nOut = (int)*pnOut;
+  WhereCost nNew;
 
 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
   Index *p = pBuilder->pNew->u.btree.pIndex;
@@ -2619,6 +2620,7 @@ static int whereRangeScanEst(
         whereKeyStats(pParse, p, pRec, 0, a);
         iNew = a[0] + ((pLower->eOperator & WO_GT) ? a[1] : 0);
         if( iNew>iLower ) iLower = iNew;
+        nOut--;
       }
     }
 
@@ -2633,12 +2635,12 @@ static int whereRangeScanEst(
         whereKeyStats(pParse, p, pRec, 1, a);
         iNew = a[0] + ((pUpper->eOperator & WO_LE) ? a[1] : 0);
         if( iNew<iUpper ) iUpper = iNew;
+        nOut--;
       }
     }
 
     pBuilder->pRec = pRec;
     if( rc==SQLITE_OK ){
-      WhereCost nNew;
       if( iUpper>iLower ){
         nNew = whereCost(iUpper - iLower);
       }else{
@@ -2660,13 +2662,17 @@ static int whereRangeScanEst(
   assert( pLower || pUpper );
   /* TUNING:  Each inequality constraint reduces the search space 4-fold.
   ** A BETWEEN operator, therefore, reduces the search space 16-fold */
+  nNew = nOut;
   if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ){
-    nOut -= 20;        assert( 20==whereCost(4) );
+    nNew -= 20;        assert( 20==whereCost(4) );
+    nOut--;
   }
   if( pUpper ){
-    nOut -= 20;        assert( 20==whereCost(4) );
+    nNew -= 20;        assert( 20==whereCost(4) );
+    nOut--;
   }
-  if( nOut<10 ) nOut = 10;
+  if( nNew<10 ) nNew = 10;
+  if( nNew<nOut ) nOut = nNew;
   *pnOut = (WhereCost)nOut;
   return rc;
 }
@@ -4203,7 +4209,7 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){
        && p->nLTerm<pTemplate->nLTerm
        && (p->wsFlags & pTemplate->wsFlags & WHERE_INDEXED)!=0
        && (p->u.btree.pIndex==pTemplate->u.btree.pIndex
-           || p->u.btree.pIndex->nColumn>=pTemplate->u.btree.pIndex->nColumn)
+          || pTemplate->rRun+p->nLTerm<=p->rRun+pTemplate->nLTerm)
       ){
         /* Overwrite an existing WhereLoop with an similar one that uses
         ** more terms of the index */
index 17ef36c475b865199100e5c9194d166915857e61..aaf0ba3bb002197d6ce1a595d37562bdfd76c725 100644 (file)
@@ -805,7 +805,6 @@ do_test 16.1 {
     ANALYZE;
   }
   set nByte2 [lindex [sqlite3_db_status db SCHEMA_USED 0] 1]
-puts "$nByte $nByte2"
 
   expr {$nByte2 > $nByte+900 && $nByte2 < $nByte+1050}
 } {1}
@@ -846,7 +845,7 @@ do_eqp_test 17.3 {
 } {/USING INDEX i1/}
 
 do_execsql_test 17.4 {
-  CREATE INDEX i2 ON t1(c);
+  CREATE INDEX i2 ON t1(c, d);
   ANALYZE main.i2;
 }
 do_eqp_test 17.5 {