Эффективность SQL - [=] против [в] против [как] против [соответствует] - PullRequest
9 голосов
/ 28 июля 2010

Просто из любопытства мне было интересно, есть ли какие-либо различия в скорости / эффективности при использовании [=] против [in] против [like] и [matches] (только для 1 значения) синтаксис для sql.

select field from table where field = value;

против

select field from table where field in (value);

против

select field from table where field like value;

против

select field from table where field matches value;

Ответы [ 4 ]

8 голосов
/ 28 июля 2010

это зависит от базового движка SQL. Например, в MS-SQL (в соответствии с выходными данными планировщика запросов) предложения IN преобразуются в =, поэтому не будет разницы

7 голосов
/ 28 июля 2010

Я добавлю к этому также существует и подзапрос .

Но производительность зависит от оптимизатора данного механизма SQL.

В oracle у вас много различий между IN и EXISTS, но не обязательно в SQL Server.

Еще одна вещь, которую вы должны учитывать, - это избирательность столбца, который вы используете.Некоторые случаи показывают, что IN лучше.


Но вы должны помнить, что IN не может быть sargable (без аргумента поиска), поэтому он неиспользуйте индекс для разрешения запроса, LIKE и = sargable и поддерживают индекс


Лучше всего?Вы должны потратить некоторое время, чтобы протестировать его в вашей среде

4 голосов
/ 28 июля 2010

Лучшей практикой для любого вопроса о том, что будет быстрее, является измерение. Механизмы SQL, как известно, сложно предсказать. Вы можете посмотреть на вывод EXPLAIN PLAN, чтобы понять его, но в итоге только измерение производительности на реальных данных скажет вам, что вам нужно знать.

Теоретически, движок SQL мог бы реализовать все три из них точно так же, но они не могут.

2 голосов
/ 28 июля 2010

обычно оператор in используется, когда нужно сравнить несколько значений.Движок просматривает список для каждого значения, чтобы увидеть, совпадает ли оно.если есть только один элемент, то по сравнению с оператором "=" нет разницы во времени.

выражение "like" отличается тем, что использует сопоставление с образцом для поиска правильных значений, и поэтому требуетнемного больше работы в задней части.Для одного значения не будет существенной разницы во времени, потому что у вас будет только одно возможное совпадение, и сравнение будет того же типа сравнения, что и для "=" и "in".

в принципе, нет, или, по крайней мере, разница настолько незначительна, что вы не заметите.

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