Для списков с двумя элементами это не имеет значения.
Однако MySQL оптимизирует IN
, когда список состоит из константных выражений. Он в основном сортирует их и выполняет двоичный поиск по списку. Это может быть значительной экономией с более длинными списками. Как объясняет документация :
Если все значения являются константами, они оцениваются в соответствии с типом
из expr и отсортировано. Поиск элемента затем выполняется с помощью
бинарный поиск. Это означает, что IN очень быстрый, если список значений IN
состоит полностью из констант.
Как правило, IN
безопаснее и лучше выполняет захват нужного столбца. Очень легко принять такие условия:
where winner = 'Subject1' OR winner = 'Subject2'
и добавить еще одно условие:
where winner = 'Subject1' or winner = 'Subject2' and
foo = 'bar'
и эта логика, вероятно, уже не та, которую вы действительно хотите - потому что она действительно означает:
where winner = 'Subject1' or
(winner = 'Subject2' and foo = 'bar')
Этого не происходит с IN
:
where winner in ('Subject1', 'Subject2') and
foo = 'bar'