Оператор BETWEEN по сравнению с> = И <=: существует ли различие в производительности?

Эти два оператора логически эквивалентны:

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100

SELECT * FROM table WHERE someColumn >= 1 AND someColumn <= 100

Существует ли потенциальный выигрыш в производительности одному по сравнению с другим?

12
задан stakx supports GoFundMonica 27 January 2013 в 13:50
поделиться

4 ответа

Никакой пользы, просто синтаксический сахар.

Используя версию BETWEEN , вы можете избежать переоценки функции в некоторых случаях.

5
ответ дан 2 December 2019 в 22:51
поделиться

Хм, вот неожиданный результат. У меня здесь нет 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 - это просто синтаксический сахар.

Лично я использую его регулярно, потому что он понятнее для читателя, особенно если проверяемое значение является выражением. Выяснить, что два сложных выражения идентичны, может оказаться нетривиальным занятием. Выяснить, что два сложных выражения ДОЛЖНЫ БЫТЬ идентичными, даже если это не так, еще труднее.

1
ответ дан 2 December 2019 в 22:51
поделиться

Нет никакого выигрыша в производительности, просто проще читать / записывать первый.

1
ответ дан 2 December 2019 в 22:51
поделиться

Нет, никакой пользы от производительности. Это просто маленькая конфетка.

Если вы хотите проверить сравнение запросов, например

DECLARE @Table TABLE(
        ID INT
)

SELECT  *
FROM    @Table
WHERE   ID >= 1 AND ID <= 100

SELECT  *
FROM    @Table 
WHERE   ID BETWEEN 1 AND 100

, и проверить план выполнения, , вы должны заметить, что это точно такой же .

1
ответ дан 2 December 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: