Если вы оптимизируете именно этот запрос, то a
будет лучшей оптимизацией. Ваше предложение WHERE
сначала проверит column_a
, а затем перейдет к следующей строке, если это не соответствует. Он только продолжит проверку column_b
, если соответствует , соответствует column_a
. Поэтому вам нужен индекс, который сначала сортируется по column_a
, а затем по column_b
, а не по двум отдельным индексам.
Считайте, что это в отличие от предложения OR
, где вы обычно хотели бы два отдельных индекса, потому что OR
говорит: «сначала выберите все совпадения для column_a
и , затем выберите все совпадения для column_b
, независимо, и, наконец, объединение наборов результатов вместе ". Поскольку этот запрос не использует обратную связь от column_a
, когда он проверяет column_b
, вы хотите использовать различные индексы там.
Также обратите внимание, что все это написано в очень общих выражениях. Эти вещи могут меняться от случая к случаю в зависимости от того, как выглядят ваши данные. Один хороший способ - создать один индекс, посмотреть, какова производительность, отбросить его, создать другой и выбрать лучший.