Я бы изменил ваш запрос на столбец JOIN vs selection. Медленнее, поскольку он должен выполнять выбор столбца каждый раз. Теперь, если вы хотите только для setting_id = 2, просто добавьте часть JOIN условия
select distinct
o.id,
o.order_status,
s.setting_id
from
orders o
join settings s
on o.id = s.order_id
AND s.setting_id = 2
order by
orders.id desc
limit
100 OFFSET 0
(это также не удавалось, потому что у вас была лишняя запятая после столбца выбора настроек). Вы также могли бы отменить объединение, начав с таблицы настроек, чтобы вас интересовали только те, у кого статус 2, а затем находили ордера. Я бы позаботился о том, чтобы в вашей таблице настроек был индекс (setting_id, order_id) для оптимизации запроса.
select distinct
s.order_id id,
o.order_status,
s.setting_id
from
settings s
JOIN orders o
on s.order_id = o.id
where
s.setting_id = 2
order by
s.order_id desc
limit
100 OFFSET 0
При правильном указателе, как указано выше, приведенное выше должно быть молниеносно непосредственно из индекса
Еще одно соображение для кажущейся большой таблицы: ограничить количество дней назад, когда вы запрашиваете заказы, лимитом 100. Go назад 1 месяц? 2? 15 дней? Насколько велика таблица ваших заказов, чтобы она тянулась в течение 10 секунд. Это может быть лучшим выбором для вас.