parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

G_Z 23.05 22:51 / 24.05 04:31

Самым быстрым и наименее требовательным к памяти оказался такой вариант:
@distinct[table;column][locals]
$exists[^hash::create[]]

$result[^table.select(^_filter[$exists;$table.$column])]


@_filter[exists;value][locals]
$result(!^exists.contains[$value])

$exists.$value[]
Если бы Парсер позволял в double-контексте код, то можно было бы обойтись и без метода @_filter.

На таблице из 100 тысяч строк, при 38724-х уникальных значениях, результаты таковы (utime + stime, used/ever_allocated_since_start):
1. вышеприведённый вариант (select + hash + contains) — 0,3484022 с, 1848/11739,8515625 КБ;
2. Maxx (table.hash + foreach + append) — 0,3588023 с, 20380/23186,5859375 КБ;
3. Sumo (foreach + contains + append) — 0,6500042 с, 20548/31197,9609375 КБ.