powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / if exists
16 сообщений из 16, страница 1 из 1
if exists
    #40061316
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть оператор select, данные из которого используются для построения документа в word или excel.
Прежде чем его запускать, я проверяю - не пустой ли результат у этого select
Делаю if exists(select...)
Есть случаи, когда этот select возвращает несколько сотен тысяч записей. Это занимает около минуты.
Казалось бы реализация exists могла бы прекратить работу как только появится 1 запись. Но нет - select
выполняется полностью.
Надеюсь на совет на какой бы козе это объехать?
Все пробы делал из management studio.
...
Рейтинг: 0 / 0
if exists
    #40061318
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07,

EXISTS проверяет наличие только первой записи.
...
Рейтинг: 0 / 0
if exists
    #40061319
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается что нет - весь запрос.
if exists выполняется около минуты
...
Рейтинг: 0 / 0
if exists
    #40061320
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07,

1. Первую запись можно получить и через день, если она заблокирована.
2. Некоторые операции перед тем, как отдать хотя бы одну запись, требуют обработки всего входного набора. Например, сортировка или hash join.
...
Рейтинг: 0 / 0
if exists
    #40061323
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07
Надеюсь на совет на какой бы козе это объехать?

1. Оптимизировать запрос - см. выше про сортировку и/или hash join.
2. Результат запроса залить во временную таблицу/табличную переменную, if exists выполнять на запросе из них, отдавать выборку тоже из них.
...
Рейтинг: 0 / 0
if exists
    #40061329
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за мысль о сортировке - сработало после добавления индекса, но не радикально.
Проблема снялась после упрощения запроса - для if exists запрос сделал попроще,
а прежде использовал полный запрос предназначенный для построения документа
...
Рейтинг: 0 / 0
if exists
    #40061414
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if exists (select top 1 1 from myTable) ?
...
Рейтинг: 0 / 0
if exists
    #40061433
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_
if exists (select top 1 1 from myTable) ?


Ваще то, документировано, что в exists все, что до "from myTable where" ни на что не влияет.

top 1 или 1 вместо * - абсолютно фиолетово.
...
Рейтинг: 0 / 0
if exists
    #40061437
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
SIMPLicity_
if exists (select top 1 1 from myTable) ?


Ваще то, документировано, что в exists все, что до "from myTable where" ни на что не влияет.

top 1 или 1 вместо * - абсолютно фиолетово.


Согласен. Помню об этом. Тем не менее, проверил на таблице из 60 тыс. строк с условием по полю nvarchar(max) с условием like '%...%' . Результаты идентичные в пределах погрешности 1-2% (миллисекунды "плясали" туда-сюда).

PS После чтения статьи о перепитиях реализация комманды XCHNG в интелловских процессорах (сколько аппаратных циклов затрачивается на неё) готов к чему бы ни было : "хочешь быть уверенным проверь дважды...., и ещё разочек,- но уже на другом оборудовании"
...
Рейтинг: 0 / 0
if exists
    #40061439
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
SIMPLicity_
if exists (select top 1 1 from myTable) ?


Ваще то, документировано, что в exists все, что до "from myTable where" ни на что не влияет.

top 1 или 1 вместо * - абсолютно фиолетово.
Не совсем фиолетово. В SELECT могут использоваться только существующие поля таблицы.
Общепринято писать SELECT *
...
Рейтинг: 0 / 0
if exists
    #40061447
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
aleks222
пропущено...


Ваще то, документировано, что в exists все, что до "from myTable where" ни на что не влияет.

top 1 или 1 вместо * - абсолютно фиолетово.
Не совсем фиолетово. В SELECT могут использоваться только существующие поля таблицы.
Общепринято писать SELECT *


Ну да, вместо select update писать нельзя.
...
Рейтинг: 0 / 0
if exists
    #40061451
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
iap
пропущено...
Не совсем фиолетово. В SELECT могут использоваться только существующие поля таблицы.
Общепринято писать SELECT *


Ну да, вместо select update писать нельзя.
UPDATE нельзя, но список полей-то хоть можно?
...
Рейтинг: 0 / 0
if exists
    #40061531
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть и фиолетово, но что вернет запрос, если select * и пользователю запрещено читать хотя бы один столбец, входящий в эту *?
...
Рейтинг: 0 / 0
if exists
    #40061547
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В проверках на exists лучше писать SELECT 0 (ну или любую другую константу). Это потенциально уменьшит количество последующих переделок, если в будущем где-то в цепочке "таблица-вьюха-функция-процедура-итд" потребуется добавить SCHEMABINDING.
...
Рейтинг: 0 / 0
if exists
    #40061844
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что вы спорите-то? :)
Если судить по задаче, то наиболее выгодный (общеупотребительный) вариант предложил Сон Веры Павловны (п.2)
А, в дальнейшем, лично я бы, учитывая пожелания ТС ( if exists(..)), воспользовался бы переменной @@rowcount и не возился с exists'oм
...
Рейтинг: 0 / 0
if exists
    #40061888
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
godsql
Что вы спорите-то? :)
Если судить по задаче, то наиболее выгодный (общеупотребительный) вариант предложил Сон Веры Павловны (п.2)
А, в дальнейшем, лично я бы, учитывая пожелания ТС ( if exists(..)), воспользовался бы переменной @@rowcount и не возился с exists'oм

Кто на ком стоял? Ты хоть понял?

Тредстартер желает СНАЧАЛА проверить, а потом молотить чудовищный запрос.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / if exists
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]