mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Increase the number of parallel paths in the query solver from 12 to 20.
In the .wheretrace output, sort the parallel paths in order of increasing cost. FossilOrigin-Name: 8ba2c2f5cb31f7bcc426bec78457316ef11d0b5debf24e8da8c6fc2f95878b1e
This commit is contained in:
32
src/where.c
32
src/where.c
@ -5286,9 +5286,9 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
|
||||
** ----- --------
|
||||
** 1 1 // the most common case
|
||||
** 2 5
|
||||
** 3+ 12
|
||||
** 3+ 20
|
||||
*/
|
||||
mxChoice = (nLoop<=1) ? 1 : (nLoop==2 ? 5 : 12);
|
||||
mxChoice = (nLoop<=1) ? 1 : (nLoop==2 ? 5 : 20);
|
||||
assert( nLoop<=pWInfo->pTabList->nSrc );
|
||||
WHERETRACE(0x002, ("---- begin solver. (nRowEst=%d, nQueryLoop=%d)\n",
|
||||
nRowEst, pParse->nQueryLoop));
|
||||
@ -5535,16 +5535,28 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
|
||||
|
||||
#ifdef WHERETRACE_ENABLED /* >=2 */
|
||||
if( sqlite3WhereTrace & 0x02 ){
|
||||
LogEst rMin, rFloor = 0;
|
||||
int nDone = 0;
|
||||
sqlite3DebugPrintf("---- after round %d ----\n", iLoop);
|
||||
for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){
|
||||
sqlite3DebugPrintf(" %s cost=%-3d nrow=%-3d order=%c",
|
||||
wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow,
|
||||
pTo->isOrdered>=0 ? (pTo->isOrdered+'0') : '?');
|
||||
if( pTo->isOrdered>0 ){
|
||||
sqlite3DebugPrintf(" rev=0x%llx\n", pTo->revLoop);
|
||||
}else{
|
||||
sqlite3DebugPrintf("\n");
|
||||
while( nDone<nTo ){
|
||||
rMin = 0x7fff;
|
||||
for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){
|
||||
if( pTo->rCost>rFloor && pTo->rCost<rMin ) rMin = pTo->rCost;
|
||||
}
|
||||
for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){
|
||||
if( pTo->rCost==rMin ){
|
||||
sqlite3DebugPrintf(" %s cost=%-3d nrow=%-3d order=%c",
|
||||
wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow,
|
||||
pTo->isOrdered>=0 ? (pTo->isOrdered+'0') : '?');
|
||||
if( pTo->isOrdered>0 ){
|
||||
sqlite3DebugPrintf(" rev=0x%llx\n", pTo->revLoop);
|
||||
}else{
|
||||
sqlite3DebugPrintf("\n");
|
||||
}
|
||||
nDone++;
|
||||
}
|
||||
}
|
||||
rFloor = rMin;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user