Yes this is the first SELECT Querie that returns a result set. 
- The Client app launches and opens a connection, 

- A TRANSACTION is begun

- Multiple UPSERTS are performed if data is available ( about 5k rows of:
REPLACE INTO MyTable ( RowID, UpDtUNIX, Zip, cCode, RecID, jDate, Blob1, Blob2, 
Blob3) VALUES ( ?,?,?,?,?,?,?,?,? )
prepare()
bind()
step()
reset()
finalize()

- A querie is executed to retrieve a result set from the table of 40k records:
SELECT RowID, Zip, RecID, Blob1, Blob2 FROM MyTable 
WHERE RecID=1 OR RecID=4 OR RecID=5
AND jDate > MinJulianDate AND jDate < MaxJulianDat
ORDER BY cCode

RowID is the Primary Key and there is an Index for jDate but not RecID or cCode.

Now I suspect your (very valid) first suggestion will be to add an index for 
these columns, then the first querie will not have to do all the processing 
which I assume is something like reading the entire database and making a 
temporary index for the other columns that has a shelf life of the connection 
hande?)

Unfortunatly the design spec is VERy focused upon the UPSERT phase of the app. 
This has to meet some requirements that have intially dictated the reduction in 
the number of keys.

While it would make sense to discuss ways to possibly improve that, the real 
point is that no one cares that the first Querie takes so long as long as there 
some progress indication (and I dont mean a endlessly repeating progress bar)

So I am wondering if there is a way for SQLite to report progress?
The other scenario where this would make sense would be when there are many 
columns and a user is given the ability to design his own Querie that may 
include  columns that are not indexed.



       
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to