|
if exists
|
|||
---|---|---|---|
#18+
Есть оператор select, данные из которого используются для построения документа в word или excel. Прежде чем его запускать, я проверяю - не пустой ли результат у этого select Делаю if exists(select...) Есть случаи, когда этот select возвращает несколько сотен тысяч записей. Это занимает около минуты. Казалось бы реализация exists могла бы прекратить работу как только появится 1 запись. Но нет - select выполняется полностью. Надеюсь на совет на какой бы козе это объехать? Все пробы делал из management studio. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 11:12 |
|
if exists
|
|||
---|---|---|---|
#18+
muk07, EXISTS проверяет наличие только первой записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 11:36 |
|
if exists
|
|||
---|---|---|---|
#18+
Получается что нет - весь запрос. if exists выполняется около минуты ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 11:38 |
|
if exists
|
|||
---|---|---|---|
#18+
muk07, 1. Первую запись можно получить и через день, если она заблокирована. 2. Некоторые операции перед тем, как отдать хотя бы одну запись, требуют обработки всего входного набора. Например, сортировка или hash join. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 11:39 |
|
if exists
|
|||
---|---|---|---|
#18+
muk07 Надеюсь на совет на какой бы козе это объехать? 1. Оптимизировать запрос - см. выше про сортировку и/или hash join. 2. Результат запроса залить во временную таблицу/табличную переменную, if exists выполнять на запросе из них, отдавать выборку тоже из них. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 11:57 |
|
if exists
|
|||
---|---|---|---|
#18+
Спасибо за мысль о сортировке - сработало после добавления индекса, но не радикально. Проблема снялась после упрощения запроса - для if exists запрос сделал попроще, а прежде использовал полный запрос предназначенный для построения документа ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 12:44 |
|
if exists
|
|||
---|---|---|---|
#18+
if exists (select top 1 1 from myTable) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 01:54 |
|
if exists
|
|||
---|---|---|---|
#18+
SIMPLicity_ if exists (select top 1 1 from myTable) ? Ваще то, документировано, что в exists все, что до "from myTable where" ни на что не влияет. top 1 или 1 вместо * - абсолютно фиолетово. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 11:52 |
|
if exists
|
|||
---|---|---|---|
#18+
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 в интелловских процессорах (сколько аппаратных циклов затрачивается на неё) готов к чему бы ни было : "хочешь быть уверенным проверь дважды...., и ещё разочек,- но уже на другом оборудовании" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 12:38 |
|
if exists
|
|||
---|---|---|---|
#18+
aleks222 SIMPLicity_ if exists (select top 1 1 from myTable) ? Ваще то, документировано, что в exists все, что до "from myTable where" ни на что не влияет. top 1 или 1 вместо * - абсолютно фиолетово. Общепринято писать SELECT * ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 13:42 |
|
if exists
|
|||
---|---|---|---|
#18+
iap aleks222 пропущено... Ваще то, документировано, что в exists все, что до "from myTable where" ни на что не влияет. top 1 или 1 вместо * - абсолютно фиолетово. Общепринято писать SELECT * Ну да, вместо select update писать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 14:18 |
|
if exists
|
|||
---|---|---|---|
#18+
aleks222 iap пропущено... Не совсем фиолетово. В SELECT могут использоваться только существующие поля таблицы. Общепринято писать SELECT * Ну да, вместо select update писать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 14:26 |
|
if exists
|
|||
---|---|---|---|
#18+
Может быть и фиолетово, но что вернет запрос, если select * и пользователю запрещено читать хотя бы один столбец, входящий в эту *? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 00:09 |
|
if exists
|
|||
---|---|---|---|
#18+
В проверках на exists лучше писать SELECT 0 (ну или любую другую константу). Это потенциально уменьшит количество последующих переделок, если в будущем где-то в цепочке "таблица-вьюха-функция-процедура-итд" потребуется добавить SCHEMABINDING. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 03:06 |
|
if exists
|
|||
---|---|---|---|
#18+
Что вы спорите-то? :) Если судить по задаче, то наиболее выгодный (общеупотребительный) вариант предложил Сон Веры Павловны (п.2) А, в дальнейшем, лично я бы, учитывая пожелания ТС ( if exists(..)), воспользовался бы переменной @@rowcount и не возился с exists'oм ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 21:50 |
|
if exists
|
|||
---|---|---|---|
#18+
godsql Что вы спорите-то? :) Если судить по задаче, то наиболее выгодный (общеупотребительный) вариант предложил Сон Веры Павловны (п.2) А, в дальнейшем, лично я бы, учитывая пожелания ТС ( if exists(..)), воспользовался бы переменной @@rowcount и не возился с exists'oм Кто на ком стоял? Ты хоть понял? Тредстартер желает СНАЧАЛА проверить, а потом молотить чудовищный запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 07:01 |
|
|
start [/forum/topic.php?fid=46&fpage=28&tid=1684833]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 325ms |
total: | 465ms |
0 / 0 |