Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 зачем использовать "select 1 from " ?  [new]
Dari_18
Member

Откуда: Харьков
Сообщений: 52
Здравствуйте!
подскажите,пожалуйста, в чем разница между 2мя селектами, если
селект * from 
возвращает все поля таблицы, а
селект 1 from
- возвращает поля таблицы- 1 столбик,заполненный единицами. когда мы используем и зачем селект 1 from?
27 июн 12, 09:39    [12780163]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
считывание всех полей имеет свою стоимость, передача на клиента всех полей из таблицы тоже зачастую не обоснована, использование * приводит к ошибкам в случае изменения названия поля
27 июн 12, 09:47    [12780220]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Dari_18, это из серии "мифы и легенды". Чаще всего такое встречается в exists
27 июн 12, 10:57    [12780823]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Dari_18
подскажите,пожалуйста, в чем разница между 2мя селектами,

Они возвращают разные результаты
27 июн 12, 11:06    [12780899]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Dari_18
Member

Откуда: Харьков
Сообщений: 52
спасибо!правда я почти ничего не поняла))
27 июн 12, 11:18    [12780990]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Dari_18
Member

Откуда: Харьков
Сообщений: 52
Glory,

про разные результаты я знаю,я не понимаю ,нужно ли когда-нибудь использовать селект 1, и в каких случаях это дает положительный результат, или ускоряет быстродействие..
27 июн 12, 11:19    [12781002]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Dari_18
я не понимаю ,нужно ли когда-нибудь использовать селект 1

Использовать тогда, когда вам нужен такой результат.
27 июн 12, 11:20    [12781012]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
Dari_18
Glory,

про разные результаты я знаю,я не понимаю ,нужно ли когда-нибудь использовать селект 1, и в каких случаях это дает положительный результат, или ускоряет быстродействие..

Вам ответили довольно подробно
12780220
27 июн 12, 11:20    [12781014]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Dari_18
Glory,

про разные результаты я знаю,я не понимаю ,нужно ли когда-нибудь использовать селект 1, и в каких случаях это дает положительный результат, или ускоряет быстродействие..

Нужно использовать, когда не важно какие поля вернуть из результирующего набора данных, нужен только факт наличия строк. Например, если использовать некластерный индекс в запросе, то select 1 поможет избежать лишней операции RID lookup в плане запросов.
27 июн 12, 12:01    [12781487]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
buser
Dari_18, это из серии "мифы и легенды". Чаще всего такое встречается в exists

иногда в exists приходится использовать select 1 вместо select *, например, при создании вьюхи with schemabinding
27 июн 12, 12:03    [12781507]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Добрый Э - Эх
Guest
Shakill
иногда в exists приходится использовать select 1 вместо select *, например, при создании вьюхи with schemabinding

А разве SELECT-лист [NOT] EXISTS подзапроса не игнорится?

select 1 / 0

Divide by zero error encountered.: select 1 / 0



select 'infinity' / 0

Conversion failed when converting the varchar value 'infinity' to data type int.: select 'infinity' / 0

Но при этом:
Select 1 as f where exists (select 'infinity' / 0, 1 / 0)

 F
---
  1
 Record Count: 1; Execution Time: 0ms 
27 июн 12, 12:24    [12781738]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Добрый Э - Эх, использование звездочки запрещено с schemabinding явным образом:
Msg 1054, Level 15, State 6, Procedure myview1, Line 4
Syntax '*' is not allowed in schema-bound objects.
27 июн 12, 12:31    [12781826]     Ответить | Цитировать Сообщить модератору
 Re: зачем использовать "select 1 from " ?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Добрый Э - Эх
А разве SELECT-лист [NOT] EXISTS подзапроса не игнорится?[/src]


эээ.. оно-то, конечно, да, но вот наши коллеги в ms временами такие затейники.. помницо, после одного из сп нужно было в кучу запросов внутрь exists срочно top 1 дописывать, а то они "ложились набок", после-то, конечно, попустило, но осадочек-то остался
27 июн 12, 12:31    [12781827]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить