• [^] # Re: I like =

    Posté par . 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 :

     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 += 1
     else:
     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]))

    Mais elle ne semble pas performante.