Порядок в предложении WHERE здесь не актуален. Так что, да, два индекса будут отлично обслуживать все четыре примера.
Что касается индекса, чтобы помочь JOIN, да, есть , как правило, рекомендуется.
Вы можете обнаружить, что если вы создаете индексы, которые идеально подходят для каждого соединения, которое вы когда-либо используете, у вас будет много индексов. Это может привести к проблемам с производительностью при записи в таблицу. В таких случаях вы можете найти небольшой набор индексов, которые не идеальны для ваших выражений JOINs и WHERE, но достаточно хороши, чтобы вы могли управлять только этими немногими. Это компромисс, который вы должны сбалансировать.
Наконец, обратите внимание, что некоторые СУБД могут использовать объединение индексов. Это может означать, что несколько простых или более простых индексов почти так же хороши, как составной / покрывающий индекс. Но в большинстве случаев при рассмотрении того, что индексировать, необходимо учитывать предложение WHERE и JOIN одновременно.
Это потому, что основной характеристикой индекса является порядок записей. Идеальный сценарий - это иметь все интересующие записи в одном последовательном блоке (после того, как предложение WHERE и JOIN отфильтровали его), и в порядке, подходящем для последующих JOIN или GROUP BY. В действительности вы стремитесь к тому, чтобы данные находились в как можно меньшем количестве последовательных кластеров и как можно лучше соответствовали порядку. Тогда пусть оптимизатор СУБД сделает все остальное:)