Ich versuche, eine SQLite3 Abfrage zu beschleunigen, derzeit ist es ziemlich langsam.Langsam WHERE IN SQL-Abfrage mit Pandas Python
Ich habe eine Tabelle von ~ 22 Millionen Zeilen mit zwei Spalten (uid, info)
In Python habe ich dann eine Liste von ~ 10.000 uid Werte finden, die in der Tabelle oben zu uid des entsprechen. (zufällig erzeugte Zahlen für diesen Beitrag)
import numpy as np
import pandas as pd
import sqlite3
conn = sqlite3.connect('mydb.db')
uids = np.random.random(10000)
uids = list(map(int,list(map(round,uids*2000000))))
sql_query = 'SELECT * FROM mytable WHERE uid IN (' + ','.join(map(str, uids)) + ')'
sqlpd = pd.read_sql_query(sql_query,conn)
Die Abfrage funktioniert, aber es ist ziemlich langsam (~ 15 Sekunden). Sie fragen sich, wie ich das oben beschleunigen kann, ich vermute es die WHERE ist ... in der Methodik, die das Problem
zufällige Idee: versuchen, eine temporäre Tabelle mit den uids Erstellen Sie brauchen und kommen Sie mit 'mytable' - es wäre für den Fall helfen, dass' IN' mit einem 'O umgesetzt wird (n * m) 'Algorithmus mit n Zeilen und M Uids, aber Join wäre bereits optimiert – Aprillion
Idee # 2: run 10000 wählt' WHERE uid = {} '- beide Ideen können in 'O (m * log (n)) ', keine Idee, die schneller ist – Aprillion
Ist die UID-Spalte indiziert? –