Это зависит.
Рассмотрим ваш запрос:
select b.item, b.billing_dollars, icb.IC_billing_dollars
from billing b left join
IC_billing icb
on b.invoice_number = icb.invoice_number
where b.date = '2019-09-24';
(Предположим, у меня есть столбцы из правильных таблиц.)
Оптимальной стратегией является индексна billing(date, invoice_number)
- возможно, также с item
и billing_dollars
к индексу;и ic_billing(invoice_number)
- возможно, с IC_billing_dollars
.
Я могу вспомнить две ситуации, когда фильтрация по дате в ic_billing
была бы полезной.
Во-первых, если есть индекс на (invoice_date, invoice_number)
, особенно определение первичного ключа.Тогда использование этого индекса обычно предпочтительнее, , даже если доступен другой индекс .
Второй, если ic_billing
разделен на invoice_date
.В этом случае вы захотите указать раздел для производительности.
Как правило, дополнительное ограничение даты выставления счета не помогает.В некоторых базах данных это может даже снизить производительность (особенно если подзапрос материализован, а внешний запрос не использует соответствующий индекс).