Ich benutze die lsqlite3 Lua Wrapper und ich mache Abfragen in eine Datenbank. Meine DB hat ~ 5 Millionen Zeilen und der Code, den ich Zeilen abzurufen bin mit ähneln:lua und lsqlite3: Beschleunigung Select Anweisung
db = lsqlite3.open('mydb')
local temp = {}
local sql = "SELECT A,B FROM tab where FOO=BAR ORDER BY A DESC LIMIT N"
for row in db:nrows(sql) do temp[row['key']] = row['col1'] end
Wie man sehen kann ich versuche die oben N
Zeilen in absteigender Reihenfolge nach FOO
sortierten zu bekommen (ich will um die obersten Zeilen zu bekommen und dann die LIMIT
nicht umgekehrt). Ich indizierte die Spalte A
, aber es scheint nicht viel Unterschied zu machen. Wie kann ich das schneller machen?
Ich kann nicht poste es genau, aber ... CREATE TABLE dp (p, d, m, m, d, gc, bd); CREATE INDEX mi_index EIN dp (mi); die Abfrage würde aussehen wie "Wählen Sie p, mi von dp wo d = bar Reihenfolgeby mi Grenze n" Danke für die Hilfe! – akobre01
Ja, also vergleichen Sie mit, wenn Sie 'd' indizieren. –
Ich indizierte die Spalte, die Sie vorgeschlagen haben, aber ich bekomme immer noch keine gute Leistung. Eine andere Sache zu berücksichtigen ist, dass ich ungefähr 20% -35% der Reihen in dieser Frage zurückgebe ... Ich muss irgendwie irgendwie blockieren? – akobre01