(MySQL) field in (1,2) vs (field=1 or field=2)
От: MasterMind Россия  
Дата: 04.08.15 07:34
Оценка:
В одном проекте вижу вручную написанный sql запрос в виде:
(field=1 or field=2)


Хотя, по идее можно было бы проще и понятнее написать:
field in (1,2)


В этом случае, на самом деле разворачивается в цепочку or, но при этом, если я верно помню, MySQL использует особый бинарный поиск. Кто нибудь может предположить зачем может быть использован вариант с OR?

(field=1 or field=2)
Re: (MySQL) field in (1,2) vs (field=1 or field=2)
От: BlackEric http://black-eric.lj.ru
Дата: 04.08.15 11:59
Оценка:
Здравствуйте, MasterMind, Вы писали:

MM>В этом случае, на самом деле разворачивается в цепочку or, но при этом, если я верно помню, MySQL использует особый бинарный поиск. Кто нибудь может предположить зачем может быть использован вариант с OR?


Кому как нравится, то так и пишет.
https://github.com/BlackEric001
Re: (MySQL) field in (1,2) vs (field=1 or field=2)
От: MasterZiv СССР  
Дата: 06.08.15 07:47
Оценка:
Здравствуйте, MasterMind, Вы писали:

MM>В одном проекте вижу вручную написанный sql запрос в виде:

MM>
MM>(field=1 or field=2)
MM>


MM>Хотя, по идее можно было бы проще и понятнее написать:

MM>
MM>field in (1,2)
MM>


MM>В этом случае, на самом деле разворачивается в цепочку or,


Ну, разворачивается оно там или нет -- дело 20-ое, главное -- это одно и то же.
логически эквивалентные конструкции.

MM> но при этом, если я верно помню, MySQL использует особый бинарный поиск.


Нет, никакого бинарного поиска не используется.
Может использоваться т.н. OR-strategy -- переписывание запроса в плане
как нескольких запросов с последующим UNION ALL.


select * from theTable
where field = 1
union all
select * from theTable
where field = 2


MM> Кто нибудь может предположить зачем может быть использован вариант с OR?


Оправдано это может быть только попыткой генерировать кросс-СУБД-шные запросы,
но я с трудом могу сейчас представить СУБД, которая не поддерживает IN.
А так -- безграмотность, идиотизм...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.