mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-18 10:21:03 +03:00
For the OP_SeekScan opcode, adjust the number of steps run before giving
up based on the estimated number of comparisons needed to perform a seek. FossilOrigin-Name: dc4172e6b8e1f62dc7329a3adb2223f290bc4c8055c265e88182ef432f4bcf10
This commit is contained in:
@@ -1807,7 +1807,16 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||
if( (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 ){
|
||||
assert( op==OP_SeekGE );
|
||||
assert( regBignull==0 );
|
||||
sqlite3VdbeAddOp1(v, OP_SeekScan, 10); VdbeCoverage(v);
|
||||
/* TUNING: The OP_SeekScan opcode seeks to reduce the number
|
||||
** of expensive seek operations by replacing a single seek with
|
||||
** 1 or more step operations. The question is, how many steps
|
||||
** should we try before giving up and going with a seek. The cost
|
||||
** of a seek is proportional to the logarithm of the of the number
|
||||
** of entries in the tree, so basing the number of steps to try
|
||||
** on the estimated number of rows in the btree seems like a good
|
||||
** guess. */
|
||||
sqlite3VdbeAddOp1(v, OP_SeekScan, (pIdx->aiRowLogEst[0]+9)/10);
|
||||
VdbeCoverage(v);
|
||||
}
|
||||
sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
|
||||
VdbeCoverage(v);
|
||||
|
||||
Reference in New Issue
Block a user