как в пункте в SQL-сервере работает - PullRequest
2 голосов
/ 22 февраля 2011

Я хотел бы знать, как работают сравнения для предложения IN в БД. В этом случае меня интересуют SQL-сервер и Oracle.

Я подумал о двух моделях сравнения - бинарный поиск и хеширование. Может кто-нибудь сказать мне, что метод SQL-сервер следует.

Ответы [ 3 ]

4 голосов
/ 22 февраля 2011

Предложение SQL Server IN в основном является сокращением для предложения wordier WHERE.

...WHERE column IN (1,2,3,4)

является сокращением для

...WHERE Column = 1
OR Column = 2
OR column = 3
OR column = 4

AFAIK существуетне применяется другая логика, которая отличалась бы от стандартного предложения WHERE.

2 голосов
/ 22 февраля 2011

IN обычно совпадает с EXISTS в SQL Server.Они дадут похожий план.Сказав это, IN - это сокращение от OR..OR, как упомянул JNK.

Более подробную информацию, чем вам когда-либо нужно было знать, см. Блог Quassnoi запись

К вашему сведению: сокращение OR приводит к другому важному различию NOT IN, которое очень отличается от NOT EXISTS / OUTER JOIN: NOT IN завершается ошибкой в ​​NULL в списке

2 голосов
/ 22 февраля 2011

Это зависит от плана запроса, который выберет оптимизатор.

Если в столбце, с которым вы сравниваете, есть уникальный индекс, и вы предоставляете сравнительно немного значений в списке IN по сравнению с числомстрок в таблице, вполне вероятно, что оптимизатор выберет исследование индекса, чтобы выяснить несколько строк в таблице, которые необходимо изучить.Если, с другой стороны, предложение IN является запросом, который возвращает относительно большое количество строк по сравнению с количеством строк в таблице, вполне вероятно, что оптимизатор выберет какое-то соединение, используя один измногие методы соединения, которые понимает движок базы данных.Если список IN относительно неселективен (то есть что-то вроде GENDER IN ('Male', 'Female')), оптимизатор может выбрать простое сравнение строк для каждой строки в качестве конечного шага обработки.

И, конечно, разные версии каждой базы данных с разной статистикой могут выбирать разные планы запросов, что приводит к разным алгоритмам для оценки одного и того же списка IN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...