1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

A better implementation of the moveto-neighbor optimization that checks for

nearby rows on adjacent pages.

FossilOrigin-Name: 2c4ecb85a475b9063aa8a3bb517ac181a7ded649
This commit is contained in:
drh
2017-01-21 21:47:54 +00:00
parent 451e76d5b5
commit 7f11afaba1
3 changed files with 20 additions and 15 deletions

View File

@@ -5096,14 +5096,19 @@ int sqlite3BtreeMovetoUnpacked(
*pRes = -1;
return SQLITE_OK;
}
if( pCur->aiIdx[pCur->iPage]+1<pCur->apPage[pCur->iPage]->nCell ){
pCur->aiIdx[pCur->iPage]++;
pCur->info.nSize = 0;
pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
getCellInfo(pCur);
if( pCur->info.nKey==intKey ){
*pRes = 0;
return SQLITE_OK;
/* If the requested key is one more than the previous key, then
** try to get there using sqlite3BtreeNext() rather than a full
** binary search. This is an optimization only. The correct answer
** is still obtained without this ase, only a little more slowely */
if( pCur->info.nKey+1==intKey && !pCur->skipNext ){
*pRes = 0;
rc = sqlite3BtreeNext(pCur, pRes);
if( rc ) return rc;
if( *pRes==0 ){
getCellInfo(pCur);
if( pCur->info.nKey==intKey ){
return SQLITE_OK;
}
}
}
}