Further refinements of the index scanning speed logic.
FossilOrigin-Name: e5d9371da92b4cc2c1df177cf40e0ced4d4c7421
This commit is contained in:
parent
165674d8db
commit
d3037a4123
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C Fix\stest\scases\sso\sthat\sthey\swork\swhen\sthe\squery\splanner\suses\sindex\ssize\nestimates\sto\sdetermine\swhether\sor\snot\sto\stry\san\scovering\sindex\sscan.
|
||||
D 2013-10-04T15:58:59.585
|
||||
C Further\srefinements\sof\sthe\sindex\sscanning\sspeed\slogic.
|
||||
D 2013-10-04T18:29:25.135
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -157,7 +157,7 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
||||
F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
|
||||
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
||||
F src/alter.c 2af0330bb1b601af7a7789bf7229675fd772a083
|
||||
F src/analyze.c 6aa46f043f495c337238630f219d6fcc74f87d9f
|
||||
F src/analyze.c c692855a5ba351ea2eddd916f7608fc28f09aa68
|
||||
F src/attach.c 0a17c9364895316ca4f52d06a97a72c0af1ae8b3
|
||||
F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
|
||||
F src/backup.c 2f1987981139bd2f6d8c728d64bf09fb387443c3
|
||||
@ -166,7 +166,7 @@ F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
||||
F src/btree.c 5ccbbaed7a32ba774306f610da4ab4f3e5348294
|
||||
F src/btree.h bfe0e8c5759b4ec77b0d18390064a6ef3cdffaaf
|
||||
F src/btreeInt.h f038e818bfadf75afbd09819ed93c26a333d39e0
|
||||
F src/build.c 7a91b0db709404c8b606a6d8abcaf29b1bf75bbf
|
||||
F src/build.c f92f1cd23ddb07b2aa84e21199bab97ad2da1144
|
||||
F src/callback.c f99a8957ba2adf369645fac0db09ad8adcf1caa2
|
||||
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
||||
F src/ctime.c ea4b7f3623a0fcb1146e7f245d7410033e86859c
|
||||
@ -216,7 +216,7 @@ F src/printf.c da9119eb31a187a4b99f60aa4a225141c0ebb74b
|
||||
F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68
|
||||
F src/resolve.c 7459801d02997b07e8b8da85ef255392ba1d022b
|
||||
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
||||
F src/select.c 340aa50982b61c4e41bc2416a0caddda5d4499f0
|
||||
F src/select.c f64a972fc74cd01dd6e3a6cbfdae4f3b422e202f
|
||||
F src/shell.c 5ee50ca3e35453bbd6ccdf1bdd0f6bbe9738e9fb
|
||||
F src/sqlite.h.in ec40aa958a270416fb04b4f72210357bf163d2c5
|
||||
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
||||
@ -1119,7 +1119,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||
F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
|
||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||
P 07462bb6059f023c22a6c84a4a02afbd84e69255
|
||||
R c53ee7ecd2949869b611b9550600e22e
|
||||
P 2f394de88f23dacd3c61e586a4214ffc6f927d97
|
||||
R 5ccf33e3078e70324dfa975f1d6b983c
|
||||
U drh
|
||||
Z 3b4f199613fede1bea11e11c52c662ed
|
||||
Z dd56ec9b94b111ff7da0d679d65274c2
|
||||
|
@ -1 +1 @@
|
||||
2f394de88f23dacd3c61e586a4214ffc6f927d97
|
||||
e5d9371da92b4cc2c1df177cf40e0ced4d4c7421
|
@ -1259,7 +1259,6 @@ static void decodeIntArray(
|
||||
int c;
|
||||
int i;
|
||||
tRowcnt v;
|
||||
int v32;
|
||||
|
||||
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
|
||||
if( z==0 ) z = "";
|
||||
@ -1276,23 +1275,19 @@ static void decodeIntArray(
|
||||
if( *z==' ' ) z++;
|
||||
}
|
||||
if( pIndex ){
|
||||
while( z[0] ){
|
||||
for(i=1; z[i] && z[i]!=' '; i++){}
|
||||
if( i==9 && memcmp(z, "unordered", 9)==0 ){
|
||||
pIndex->bUnordered = 1;
|
||||
}else if( i>2 && memcmp(z, "r=", 2)==0
|
||||
&& sqlite3GetInt32(z+2, &v32) ){
|
||||
if( v32>=200 ){
|
||||
v32 = 255;
|
||||
}else if( v32<0 ){
|
||||
v32 = 0;
|
||||
}else{
|
||||
v32 = (128*v32)/100;
|
||||
}
|
||||
pIndex->iScanRatio = (u8)v32;
|
||||
if( strcmp(z, "unordered")==0 ){
|
||||
pIndex->bUnordered = 1;
|
||||
}else if( sqlite3_strglob("r=[0-9]*", z)==0 ){
|
||||
int v32 = 0;
|
||||
sqlite3GetInt32(z+2, &v32);
|
||||
if( v32>=200 ){
|
||||
v32 = 255;
|
||||
}else if( v32<=0 ){
|
||||
v32 = 1;
|
||||
}else{
|
||||
v32 = (128*v32)/100;
|
||||
}
|
||||
z += i;
|
||||
if( z[0]==' ' ) z++;
|
||||
pIndex->iScanRatio = (u8)v32;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
35
src/build.c
35
src/build.c
@ -1071,7 +1071,7 @@ void sqlite3AddNotNull(Parse *pParse, int onError){
|
||||
char sqlite3AffinityType(const char *zIn, u8 *pszEst){
|
||||
u32 h = 0;
|
||||
char aff = SQLITE_AFF_NUMERIC;
|
||||
const char *zChar;
|
||||
const char *zChar = 0;
|
||||
|
||||
if( zIn==0 ) return aff;
|
||||
while( zIn[0] ){
|
||||
@ -1087,6 +1087,7 @@ char sqlite3AffinityType(const char *zIn, u8 *pszEst){
|
||||
}else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */
|
||||
&& (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){
|
||||
aff = SQLITE_AFF_NONE;
|
||||
if( zIn[0]=='(' ) zChar = zIn;
|
||||
#ifndef SQLITE_OMIT_FLOATING_POINT
|
||||
}else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l') /* REAL */
|
||||
&& aff==SQLITE_AFF_NUMERIC ){
|
||||
@ -1103,23 +1104,27 @@ char sqlite3AffinityType(const char *zIn, u8 *pszEst){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* If pszEst is not NULL, store an estimate of the field size. The
|
||||
** estimate is scaled so that the size of an integer is 1. */
|
||||
if( pszEst ){
|
||||
if( aff>=SQLITE_AFF_NUMERIC ){
|
||||
*pszEst = 1;
|
||||
}else if( zChar ){
|
||||
*pszEst = 1;
|
||||
while( zChar[0] ){
|
||||
int v;
|
||||
if( sqlite3Isdigit(zChar[0]) && sqlite3GetInt32(zChar, &v) ){
|
||||
v = v/4 + 1;
|
||||
if( v>255 ) v = 255;
|
||||
*pszEst = v;
|
||||
break;
|
||||
*pszEst = 1; /* default size is approx 4 bytes */
|
||||
if( aff<=SQLITE_AFF_NONE ){
|
||||
if( zChar ){
|
||||
while( zChar[0] ){
|
||||
if( sqlite3Isdigit(zChar[0]) ){
|
||||
int v;
|
||||
sqlite3GetInt32(zChar, &v);
|
||||
v = v/4 + 1;
|
||||
if( v>255 ) v = 255;
|
||||
*pszEst = v; /* BLOB(k), VARCHAR(k), CHAR(k) -> r=(k/4+1) */
|
||||
break;
|
||||
}
|
||||
zChar++;
|
||||
}
|
||||
zChar++;
|
||||
}else{
|
||||
*pszEst = 5; /* BLOB, TEXT, CLOB -> r=5 (approx 20 bytes)*/
|
||||
}
|
||||
}else{
|
||||
*pszEst = 3;
|
||||
}
|
||||
}
|
||||
return aff;
|
||||
|
@ -4607,6 +4607,7 @@ int sqlite3Select(
|
||||
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
|
||||
if( pIdx->bUnordered==0
|
||||
&& pIdx->iScanRatio<128
|
||||
&& pIdx->pPartIdxWhere==0
|
||||
&& (!pBest || pIdx->iScanRatio<pBest->iScanRatio)
|
||||
){
|
||||
pBest = pIdx;
|
||||
|
Loading…
x
Reference in New Issue
Block a user