Отказ от ответственности: все, что ниже, является лишь анекдотическим и основано на моем личном опыте. Любой, кто захочет провести более тщательный эмпирический анализ, может выполнить его и проголосовать за меня, если я. Я также знаю, что SQL является декларативным языком, и вам не нужно учитывать, как обрабатывается ваш код при его написании, но, поскольку я ценю свое время, я делаю.
Существует бесконечно логически эквивалентные утверждения, но я рассмотрю три (иш).
Случай 1: два сравнения в стандартном порядке (порядок оценки фиксирован)
A> = MinBound AND A <= MaxBound </p>
Случай 2: синтаксический сахар (порядок оценки не выбран автором)
A МЕЖДУ MinBound И MaxBound
Случай 3: два сравнения в образованном порядке (порядок оценки, выбранный во время записи)
A> = MinBound AND A> = MaxBound
или
A> = MaxBound AND A> = MinBound
По моему опыту, Случай 1 и Случай 2 не имеют каких-либо последовательных или заметных различий в производительности, поскольку они не знают набор данных.
Однако вариант 3 может значительно сократить время выполнения. В частности, если вы работаете с большим набором данных и имеете некоторые эвристические знания о том, будет ли A более вероятным, чем MaxBound или меньше, чем MinBound Вы можете значительно улучшить время выполнения, используя Case 3 и упорядочив сравнения соответственно.
Один из вариантов использования, который у меня есть, - запрос большого исторического набора данных с неиндексированными датами для записей в пределах определенного интервала. При написании запроса у меня будет хорошее представление о том, существует ли больше данных ДО указанного интервала или ПОСЛЕ указанного интервала, и могу ли я соответствующим образом упорядочить свои сравнения. Время выполнения сократилось вдвое в зависимости от размера набора данных, сложности запроса и количества записей, отфильтрованных при первом сравнении.