PDA

View Full Version : [sqlite3]Problema performance con LIMIT n OFFSET n clause


Giullo
09-04-2009, 12:20
Salve,
cerco un'anima pia che abbia esperienza di sqlite3 (magari la versione 3.40, e magari che l'ha usato su iphoneos), ho questo problema:

ho una tabella con circa 15k records che visualizzo in una tableview ... senza scendere troppo in dettagli , la classe UITableView richiama ogni volta che ha bisogno di visualizzare una o più celle un metodo cui viene passata la posizione della cella da disegnare.

il mio modello quindi cosa fa? ammesso che index sia la posizione della cella da disegnare, questa è la query eseguita:

"SELECT * FROM tbl1, tbl2 (altre tabelle, due join e molte condizioni) LIMIT 1 OFFSET (valore di index qui)"

la query è gestita da uno statement che viene preparato con l'apposita funzione di sqlite3 (sqlite3_prepare_v2()) .. il problema si verifica quando index è un valore molto alto, diciamo dal 2000 in su ...

la query che prima ci metteva meno di 10ms passa a 500ms !?!?!?

ho verificato lo stesso comportamento (chiaramente con ordini di grandezza diversi rispetto ai tempi) sia su un ipod touch sia su mac os, il che mi ha fatto pensare ad un problema di sqlite, solo che googlando in giro nn ho trovato nulla di interessante.

qualcuno si è scontrato con questo problema?

Giullo
09-04-2009, 14:54
bah che nabbo che sono :) mi ero perso nella mia googlata proprio questa pagina:

http://www.sqlite.org/cvstrac/wiki?p=ScrollingCursor

per farla breve è la tecnica che uso a causare il problema ed è altamente sconsigliata :)