2016-07-12 11 views
0

So habe ich Tabellen mit der folgenden Struktur:SQLite-Update Abfrageoptimierung

TimeStamp, 
var_1, 
var_2, 
var_3, 
var_4, 
var_5,... 

Dieser enthält etwa 600 Spalten namens var _ ##, analysiert der Benutzer einige von einer Maschine gespeicherten Daten, und ich habe alle Nullwerte aktualisieren innerhalb dieser Tabelle bis zum letzten gültigen Wert. Im Moment benutze ich die folgende Abfrage:

update tableName 
    set var_## = 
      (select b.var_## from tableName as 
         where b.timeStamp <= tableName.timeStamp and b.var_## is not null 
         order by timeStamp desc limit 1) 
    where tableName.var_## is null; 

Problem jetzt ist die zahme dauert es diese Abfrage für alle Spalten zu laufen, ist es eine Möglichkeit, diese Abfrage zu optimieren?

UPDATE: das ist der Ausgangsabfrageplan, wenn te Abfrage für eine Spalte executin:

update wme_test2 
set var_6 = 
     (select b.var_6 from wme_test2 as b 
         where b.timeStamp <= wme_test2.timeStamp and b.var_6 is not null 
         order by timeStamp desc limit 1) 
    where wme_test2.var_6 is null; 

enter image description here

+1

Ich würde dies in 2 Tabellen teilen, so dass Sie keine 600 Spalten Tabelle haben – AndrewK

Antwort

1

Mit 600 Indizes für die Datenspalten dumm wäre. (Aber nicht unbedingt alberner als mit 600 Spalten.)

Alle Abfragen können mit einem Index auf der timeStamp Spalte beschleunigt werden.

+0

Nun, ich hatte bereits mit dem Index auf timeStamp und ohne den Index ohne signifikanten Unterschied auf die Zeit, die es dauert, diese Abfragen auszuführen versucht. Da alle anderen Spalten von dieser Spalte abhängig sind und Tabellen häufiger verwendet werden, um Tabellenansichten zu erstellen, dachte ich, es wäre das Beste, alle in einer Tabelle zu speichern, als kleine Gruppen zu erstellen und sie zur Visualisierung zu verbinden. Was schlagen Sie vor? Erstellen Sie weitere Tabellen Gruppierungsvariablen wie? – heczaco

+0

Danke, dass du uns * jetzt * gesagt hast. Zeigen Sie die Ausgabe von [EXPLAIN QUERY PLAN] (http://www.sqlite.org/eqp.html) für diese Abfrage an. –

+0

Ich habe gerade die Frage mit dem Abfrageplan aktualisiert – heczaco