Je confirme pour le like. Ici, cela t'empêche d'utiliser l'index et donc tu te tapes un full scan de ta table à chaque update. Cela est très coûteux.
Après, je ne connais pas très bien sqlite, je viens d'apprendre qu'il n'y a pas de "INSERT ... ON DUPLICATE KEY UPDATE ..." ce qui t'aurais bien aidé ici.
Mais il y a une question que tu peux te poser. Aurais tu plus d'insert ou d'update ?
Ton code exécute 2 requêtes pour un update et une seule pour un insert. Si tu prévois que l'update sera plus récurent, mieux vaut faire le contraire : update d'abord, et si le nombre de rows modifiés est 0, tu fais l'insert.
Par exemple :
cursor.execute("update strings set freq=freq+? where string = ?",(strings_ok[s],s))if(cursor.rowcount==0):cursor.execute("insert into strings values (?, ?)",(s,strings_ok[s]))inserted+=1else:updated+=1
Sinon, il y aurait une solution a une requête :
cursor.execute("insert or replace into strings values (?, ifnull((SELECT freq from strings where string = ?),0)+?)",(s,s,strings_ok[s]))
[^] # Re: I like =
Posté par TilK . En réponse au journal Analyse de texte. Évalué à 3.
Je confirme pour le like. Ici, cela t'empêche d'utiliser l'index et donc tu te tapes un full scan de ta table à chaque update. Cela est très coûteux.
Après, je ne connais pas très bien sqlite, je viens d'apprendre qu'il n'y a pas de "INSERT ... ON DUPLICATE KEY UPDATE ..." ce qui t'aurais bien aidé ici.
Mais il y a une question que tu peux te poser. Aurais tu plus d'insert ou d'update ?
Ton code exécute 2 requêtes pour un update et une seule pour un insert. Si tu prévois que l'update sera plus récurent, mieux vaut faire le contraire : update d'abord, et si le nombre de rows modifiés est 0, tu fais l'insert.
Par exemple :
Sinon, il y aurait une solution a une requête :
Mais elle ne semble pas performante.