2016-07-12 7 views
0

だから私は、次のような構造を持つテーブルを持っている:SQLiteの更新クエリの最適化

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

これは、VAR _ ##という名前の約600列が含まれ、ユーザーはマシンによって保存されたいくつかのデータを解析し、私はすべてのnull値を更新する必要がありますその表の中で最後の有効な値に変更します。飼いならされたそれは、このクエリを最適化するために、どのような方法があり、すべての列のこのクエリを実行するのにかかるている今

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; 

問題:現時点では私は次のクエリを使用できますか?

UPDATEは:1列のテクエリを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

これを2つのテーブルに分割して、600のカラムテーブルを持たないようにしてください。 – AndrewK

答えて

1

データ列に600個のインデックスを持つことは愚かなことでしょう。 (しかし、600カラムを持つよりも必ずしも愚かではない)

すべてのクエリは、timeStampカラムのインデックスでスピードアップすることができます。

+0

よく、私はすでにtimeStampのインデックスとインデックスを持たずにこれらのクエリを実行するのに時間がかかりませんでした。他のすべての列はこの列に依存しているので、テーブルは頻繁に使用されてテーブルビューを作成することもあります。小さなグループを作成してビジュアライゼーションのために結合するよりも、すべてを1つのテーブルに保持することをお勧めします。何を指示してるんですか?より多くのテーブルを作成する変数をどのようにグループ化? – heczaco

+0

ありがとうございます。このクエリの[EXPLAIN QUERY PLAN](http://www.sqlite.org/eqp.html)の出力を表示します。 –

+0

質問をクエリプランで更新しました – heczaco