Эти два оператора логически эквивалентны:
SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100
SELECT * FROM table WHERE someColumn >= 1 AND someColumn <= 100
Существует ли потенциальный выигрыш в производительности одному по сравнению с другим?
Никакой пользы, просто синтаксический сахар.
Используя версию BETWEEN
, вы можете избежать переоценки функции в некоторых случаях.
Хм, вот неожиданный результат. У меня здесь нет SQL Server, поэтому я попробовал это в Postgres. Очевидно, что применяются оговорки: это не обязательно даст те же результаты, ваш опыт может отличаться, проконсультируйтесь с врачом перед использованием. Но все же ...
Я просто написал простой запрос двумя разными способами:
select *
from foo
where (select code from bar where bar.barid=foo.barid) between 'A' and 'B'
и
select *
from foo
where (select code from bar where bar.barid=foo.barid)>='A'
and (select code from bar where bar.barid=foo.barid)<='B'
Как ни удивительно, у обоих было почти одинаковое время выполнения. Когда я сделал EXPLAIN PLAN, они дали идентичные результаты. В частности, первый запрос выполнял поиск по панели дважды, один раз для теста> = и еще раз для теста <=, как и второй запрос.
Заключение: По крайней мере, в Postgres BETWEEN - это просто синтаксический сахар.
Лично я использую его регулярно, потому что он понятнее для читателя, особенно если проверяемое значение является выражением. Выяснить, что два сложных выражения идентичны, может оказаться нетривиальным занятием. Выяснить, что два сложных выражения ДОЛЖНЫ БЫТЬ идентичными, даже если это не так, еще труднее.
Нет никакого выигрыша в производительности, просто проще читать / записывать первый.
Нет, никакой пользы от производительности. Это просто маленькая конфетка.
Если вы хотите проверить сравнение запросов, например
DECLARE @Table TABLE(
ID INT
)
SELECT *
FROM @Table
WHERE ID >= 1 AND ID <= 100
SELECT *
FROM @Table
WHERE ID BETWEEN 1 AND 100
, и проверить план выполнения, , вы должны заметить, что это точно такой же .