2015年4月22日水曜日

[kdb] Performance (1) distinct / join key

Performanceメモ (1) distinct / join key

重複を排除するために使用するdistinctのPerformance

・数値のリストのリスト
floatのdistinctは非常に遅いので避けるべき。
通常floatをdistinctするケースは無いが、0.1刻みのデータや意図せずfloatになってしまっているケースもあるので注意

q) L: `float$ 10000000?10000i
q) \t distinct L
305

q) L: 10000000?10000i
q) \t distinct L
29

リストのリストをdistinctするときにより影響が大きい
q)L: til 5
q)LL: do[5; L cross L]
q)LL
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 0 2
...
q)count LL
15625

q)LLf: 0.5*10000?LL   / floatのListを作成
q)LLf
0.5 0   0   1   0   1  
0   1.5 0.5 2   1.5 1  
1.5 1   2   1   1   1.5

q)\t distinct LLf   / 要素が10000で1sもかかる
965
q)count  distinct LLf
7448

q)\t 0.5* distinct `int$2*LLf   / castの時間を加えても100倍早い
8
q)count  distinct `int$2*LLf
7448


・Join key
上記と同様に、valueとしてfloatのリストが入っているテーブル同士をjoinする場合、
floatのリストをkeyにしてjoinをすると非常に遅い。
q) meta t   / listをkeyにして結合したい
c   | t f a
----| -----
list| F     
... |      
q) count t   / 
47293j
q) t
list              ..
------------------..
1 2 3 4 5 6   7   ..
1 2 3 4 5 6.5 6.5 ..

q) \t (t同士をlistをkeyに自己結合)
200230j

q) \t (t同士をintに変換したlistをkeyに自己結合)
135j




0 件のコメント:

コメントを投稿