powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Вопрос по вложенным в from запросам
4 сообщений из 4, страница 1 из 1
Вопрос по вложенным в from запросам
    #34898080
Сергей @
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ХП ASE12.5.1 есть запрос такого типа (сильно упрощенно):
Код: plaintext
1.
2.
3.
4.
5.
6.
 select *
 from 
  (
   select *
   from table1
   where field1=@VARIABLE
  ) v
Тип @VARIABLE - datetime
Если @VARIABLE - это параметр ХП, то все работает нормально, а если просто переменная определенная через declare, то процедура до конца не выполняется (ASE рубает процес).
Почему?
...
Рейтинг: 0 / 0
Вопрос по вложенным в from запросам
    #34898778
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуйте привести не настолько 'сильно упрощённый' код ...
...
Рейтинг: 0 / 0
Вопрос по вложенным в from запросам
    #34899195
up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей @В ХП ASE12.5.1 есть запрос такого типа (сильно упрощенно):
Код: plaintext
1.
2.
3.
4.
5.
6.
 select *
 from 
  (
   select *
   from table1
   where field1=@VARIABLE
  ) v
Тип @VARIABLE - datetime
Если @VARIABLE - это параметр ХП, то все работает нормально, а если просто переменная определенная через declare, то процедура до конца не выполняется (ASE рубает процес).
Почему?

Потому, что в случае параметра процедуры план строится со "знанием" точного значения переменной и следовательно точного значения селективности, а в случае внутренней переменной используется дефолтное значение для селективности.
...
Рейтинг: 0 / 0
Вопрос по вложенным в from запросам
    #34899229
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей @ пишет:
> Если @VARIABLE - это параметр ХП, то все работает нормально, а если
> просто переменная определенная через declare, то процедура до конца не
> выполняется (ASE рубает процес).

Не должен он ничего рубать. Это наверное query timeout срабатывает. Ну
да это не суть важно.

Запросы в хранимых процедурах, в выражениях поиска которых используются
переменные, являющиеся параметрами процедуры, и простые переменные,
оптимизируются немного по-разному.

Если в запросе используется параметр процедуры, то его значение известно
на момент оптимизации запроса
(это происходит в момент первого вызова
процедуры). Поэтому оптимизатор стоит план в соответствии с селективностью
поля, участвующего в этом выражении, вычисленного для данного конкретного
значения. Как правило, это позволяет построить более точный (качественный)
план запроса.

Если в запросе используется переменная, которая не является параметром
процедуры, то ее значение на момент работы не известно, поскольку
оптимизация (построение планов запросов) производится ДО ВЫПОЛНЕНИЯ
процедуры
, в процессе которого переменным будет присвоино какое-то значение.
Поэтому, поскольку значение переменной не известны, для оценки селективности
поля таблицы, участвующем в выражении выбора, используется так называемая
селективность по-умолчанию для таблицы, которая обычно равна чему-то типа
30% (0.3) (обычно -- потому что ее вообще-то можно поменять руками)
Как правило это приводит к тому, что выражение выбора расценивается как
неэффективное (треть таблицы -- это достаточно много), и в качестве
финального плана выбирается какой-то другой план, не использующий индекс
по данному полю.

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

Тебе же надо все-таки привести полный запрос, определения таблиц, и
планы, с параметром и с переменной. Тогда можно будет сказать определенно
как это лечить.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Вопрос по вложенным в from запросам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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