Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Ольга Семенова Member Откуда: Сообщений: 724 |
Напомните пожалуйста чему идентичен запрос с BETWEEN если его переписать через использование <,>,=SELECT * FROM Universities WHERE Students BETWEEN 10000 AND 30000 будет 1. SELECT * FROM Universities WHERE Students > 10000 AND Students < 30000 или 2. SELECT * FROM Universities WHERE Students >= 10000 AND Students <= 30000 ??? источник http://2sql.ru/novosti/sql-between/ |
21 июл 19, 12:15 [21931153] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2250 |
2 |
21 июл 19, 12:55 [21931160] Ответить | Цитировать Сообщить модератору |
Mr. X Member Откуда: Сообщений: 37 |
Ольга Семенова, Используйте правильные источники "BETWEEN returns TRUE if the value of test_expression is greater than or equal to the value of begin_expression and less than or equal to the value of end_expression." |
21 июл 19, 15:51 [21931208] Ответить | Цитировать Сообщить модератору |
Ольга Семенова Member Откуда: Сообщений: 724 |
а что быстрее выполнится оптимизатором запросов ? between или сочетание ">= и <= " |
1 ноя 19, 08:53 [22007717] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20970 |
Это не разные операторы, а разные формы одного и того же оператора. Вопрос "что быстрее" не имеет смысла. |
1 ноя 19, 09:25 [22007739] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Давайте для пользы дела ответим на другой вопрос: Допустим есть запрос в котором повторяются выражения SELECT <Сложное выражение 1>, <Сложное выражение 2> FROM XX WHERE <Сложное выражение 1> >= <Сложное выражение 2> AND <Сложное выражение 1> >= 1 AND <Сложное выражение 2> <= 99999 Сделает ли оптимизатор запроса так, что эти выражение будут вычисляться один раз? И при каких условиях. И ответ не совсем очевиден. Например, в выражении могут присутствовать deterministic и nondeterministic функции. |
1 ноя 19, 09:37 [22007751] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9644 |
declare @t table (id int primary key, a float); set statistics profile on; select id, a from @t where power(a, 3) between 5 and 10 or power(a, 3) between 15 and 20; select t.id, t.a from @t t cross apply (select power(t.a, 3)) x(a3) where x.a3 between 5 and 10 or x.a3 between 15 and 20; with t as (select top (cast(0x7fffffffffffffff as bigint)) id, a, power(a, 3) as a3 from @t order by id) select id, a from t where a3 between 5 and 10 or a3 between 15 and 20; set statistics profile off; |
||
1 ноя 19, 11:20 [22007885] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
invm, У вас какие-то навороченные примеры. Если взять попроще, то вычисляет по три раза set statistics profile on; SELECT y, SIN(y) FROM (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0)) x(y) WHERE SIN(y) > 0.1 AND SIN(y) < 0.9 set statistics profile off; SELECT y, SIN(y) FROM (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0)) x(y) WHERE SIN(y) > 0.1 AND SIN(y) < 0.9 |--Compute Scalar(DEFINE:([Expr1011]=sin(CONVERT_IMPLICIT(float(53),[Union1010],0)))) |--Filter(WHERE:(sin(CONVERT_IMPLICIT(float(53),[Union1010],0))>(1.0000000000000001e-001) AND sin(CONVERT_IMPLICIT(float(53),[Union1010],0))<(9.0000000000000002e-001))) |--Constant Scan(VALUES ![]() |
1 ноя 19, 12:34 [22008010] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9644 |
|
||
1 ноя 19, 13:09 [22008054] Ответить | Цитировать Сообщить модератору |
L_argo Member Откуда: Сообщений: 1403 |
|
||
4 ноя 19, 12:05 [22009281] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
L_argo, если посмотреть на план, то нет -- не одинаково |
5 ноя 19, 09:02 [22009708] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |