kdb+/q的列表排序和查詢效能測試

lt發表於2016-06-26

列表排序有升序asc和倒序desc。
除了昨天文章中說的?查詢,對於有序列表,還有二分查詢bin。

q)l0:1+til 10000000
q)\t do[n:count l0;p:(1?n)[0];n:n-1;temp:l0[p];l0[p]:l0[n];l0[n]:temp] //隨機排列1千萬個元素
35380
q)l0
4651325 3694959 3332959 3095908 9393387 6352203 7376844 2546483 2261680 64696..
q)\t l1:asc l0   //升序排列結果賦值給l1
2620
q)\t l2:asc l1
0
q)\t l2:desc l1  //倒序排列結果賦值給l2
343
q)\t l0?l0[5000000] //在無序列表中查詢
15
q)\t l0?5000000
15
q)\t l1?5000000
0
q)\t l1 bin 5000000 //在升序列表中二分查詢
0
q)
q)l2
10000000 9999999 9999998 9999997 9999996 9999995 9999994 9999993 9999992 9999..
q)l1  //l1有個有序標誌s#
`s#1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28..
q)\t l2?5000000
15
q)\t l2?50000000 //不存在的數的查詢
46
q)l2 bin 5000000 //倒序列表執行二分查詢結果錯誤
9999999
q)l2[9999999]
1 

相關文章