Добрый день. использую образ tarantool/tarantool:2.3.1.
Создаю таблицу и индекс
box.execute([[CREATE TABLE table (id unsigned primary key, secondary unsigned);]])
box.execute([[CREATE INDEX table_secondary_idx ON table (secondary);]])
Вставляю данные
local count = 0
for _, row in pairs(array) do
box.execute([[INSERT INTO table (id, secondary) VALUES(?, ?);]], {count, count})
count = count + 1
end
Далее делаю следующее.
1: Запрос в базу
res = box.execute([[SELECT id, secondary FROM table WHERE secondary >= ]] .. min .. [[ AND secondary <= ]] .. max .. [[;]]);
Предварительно достаю данные из таблицы, и сохраняю в локальной переменной. Сортирую массив по полю secondary
res = box.execute([[SELECT id, secondary FROM table;]]);
table.sort(res, function(a,b)
return a.secondary < b.secondary
end)
2. Делаю в массиве res 2 раза бинарный поиск по числовым переменным min и max и копирую подмассив
local minPos = utils.binSearchL(res, 1, #res, min)
local maxPos = utils.binSearchR(res, 1, #res, max)
local filtered = table.move(res, minPos, maxPos, 1, {})
В таблице около 800000 строк. В первом случае, запрос выполнятеся около 100мс, во втором 1мс.
Подскажите пожалуйста, можно ли как-то улучшить результат в первом случае?