Non indovinare, misura
Quando hai un problema relativo alle prestazioni, non indovinare. Prendi un profiler, misura il tuo codice e decidi cosa ottimizzare in base ai risultati, non alle tue ipotesi o a qualcun altro.
La prima ipotesi è che sqlite3 sia lento. La tua seconda ipotesi è che hai perdite di memoria. È possibile che, quando si analizza la tua app, scoprirai che nessuna delle due ipotesi è vicina al problema reale. Succede a tutti gli sviluppatori; ecco perché non si dovrebbe indovinare.
La documentazione di Python elenca alcuni profiler per Python. Se non ne hai mai usato uno, prendi un profiler a tua scelta e vedi dove potrebbe farti arrivare. Punti bonus per il ritorno e la pubblicazione dei risultati modificando la domanda.
Sii preciso
Inoltre, quando si tratta di prestazioni, sii il più preciso possibile. Termini come "Qualche secondo", "lento", "query standard" non hanno nulla a che fare quando si tratta di prestazioni, profilazione e ottimizzazione.
-
Non esiste una cosa come pochi secondi. C'è un dato statistico sulle prestazioni di un dato pezzo di codice eseguito in un contesto molto specifico. Qualcosa che richiede cinque secondi su un Pentium IV che abbiamo buttato via ieri potrebbe essere eseguito in pochi millisecondi sul nuovo server che abbiamo appena acquistato.
-
Non esiste una cosa come il codice troppo lento: c'è un pezzo di codice che esegue in media 327 ms. su un dato hardware sotto stress dato, mentre un requisito non funzionale (vedere anche questa risposta , punti 2 e 8 ) specifica che dovrebbe eseguire meno di 300 ms. nel 95% dei casi.
-
Non esiste una query standard. Per qualcuno, una query standard può includere join. Per un'altra persona, è un select
, insert
, update
o delete
con nient'altro come where
.
Hai specificato il numero di righe nel database. Questa è la precisione di cui sto parlando. Misurare un select
su dieci righe non equivale a un miliardo di righe.
Riduci il codice misurato al minimo
Quando non puoi usare un vero profiler, può aiutarti a rimuovere tutto il codice che non ti serve e poi misurare. Nel tuo caso particolare, ciò comporta la conversione di una matrice in una stringa e la visualizzazione di questa stringa in una console.
Prova a misurare effettivamente le prestazioni dello stesso codice senza stampare quei risultati e vedere come influisce.