Я всегда работал с реляционными БД и недавно решил перенести критический по производительности сервис с SQL Server на Tarantool с надеждой воспользоваться преимуществами быстрого поиска и обработки в памяти.У меня есть пара вопросов при планировании миграции.
У меня есть таблица с около миллиона записей, содержащих информацию о ценах, что означает, что я имею дело в основном с числами и uuids.Во-первых, мне нужно выполнить выборку, содержащую несколько условий, чтобы получить подмножество данных, например
SELECT * FROM rates WHERE SupplierId = @SupplierId AND ProductId = @ProductId AND (LocalDistributionZoneId = @LocalDistributionZoneId OR LocalDistributionZoneId IS NULL)
Q1: Какова стратегия выполнения такого запроса в Lua?Создаю ли я индекс для каждого поля в предикате, или я могу использовать один вторичный составной индекс?
Q2: Будет ли удобнее выполнять такой запрос в SQL (box.sql.execute), а не в чистом Lua?Будет ли это значительно медленнее, чем выполнение того же запроса в чистом Lua?
Q3: Если я использую SQL, можно ли пересмотреть план исполнения, чтобы убедиться, что выполняемый запрос действительно использует индексы, которые я использую?определяется в пространстве?
Хорошо, после того, как я получил результаты первого запроса, мне нужно проанализировать данные, а затем, основываясь на результатах анализа, выполнить еще один запрос к набору данных, возвращенному первым запросом.
Q4: Может ли Tarantool помочь мне в работе с промежуточным набором данных?Более конкретно, могу ли я как-то выполнить больше запросов к промежуточному подмножеству кортежей, используя индексы, созданные в пространстве?Или мне нужно реализовать альтернативные стратегии, такие как повторное добавление результатов интрима во временное пространство с предварительно определенными индексами, а затем выполнить другой выбор или выполнить дополнительный поиск самостоятельно?
Спасибо!