powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / использование функций в SARG
6 сообщений из 6, страница 1 из 1
использование функций в SARG
    #37664082
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, всем доброе время суток.
Такой вопрос - если SARG использует функцию, то на каком этапе сервер определит её результат - при компилляции или при выполнении.

например

char_4_field = trim('abcd ') или my_date = getdate()
Хоть план и показывает использование индекса, но способ работы со статистикой может быть отличным от скажем
char_4_field = 'abcd' или my_date ='2012-02-15'.

dbcc traceon(3604,302) должен показать будет ли при этом default selectivity или нет, но у меня к сожалению нет sa доступа, чтобы проверить.

Если кто-нибудь проверял, поделитесь результатом.

Заранее спасибо
...
Рейтинг: 0 / 0
использование функций в SARG
    #37664180
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-чего?
Кто такой SARG? И зачем он использует несчастную функцию? О мелочах типа сервера я уже молчу...
...
Рейтинг: 0 / 0
использование функций в SARG
    #37664229
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kru,

Судя по всему речь идет об ASE.

В таких случаях бывает два варианта:

1) Оптимизатор пойдет по индексу, но не position by key , а at start index . Так как, заранее неизвестен ваш SARG(search argument).

2) Если оптимизатор расценит что вариант 1 затратней, чем table scan, то будет table scan. Но такое бывает редко, и в основном на "узких" таблицах с небольшим количеством строк.
...
Рейтинг: 0 / 0
использование функций в SARG
    #37665745
Kru,

select @@version
Adaptive Server Enterprise/15.5/EBF 18655 SMP ESD#4 ...
---------------------------------------------------------------

dbcc traceon(3604)
go
set showplan on
set statistics time on
set statistics io on
go
set option show_lio_costing on
go

---------------------------------------------------------------
select * from TAB where COL / 111 <= 1000000

FINAL PLAN ( total cost = 33510.7 ):
lio=776 pio=774 cpu=126087 tempdb=0
...
Table Scan
---------------------------------------------------------------
select * from TAB where COL <= 111 * 1000000

Estimating selectivity of index 'TAB.I_COL', indid 3
COL <= 111000000
Estimated selectivity for COL,
selectivity = 0.001379636 ,
...
FINAL PLAN ( total cost = 127.227 ):
lio=4.067838 pio=4.067838 cpu=173.9541 tempdb=0

...
Positioning by key
...
Рейтинг: 0 / 0
использование функций в SARG
    #37665971
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kru,

Кстати, ДА, лопухнулся я!

если так:
where char_4_field = trim('abcd ')
то position by key

если так:
where trim(char_4_field) = 'abcd '
то at start index
...
Рейтинг: 0 / 0
использование функций в SARG
    #37666000
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо за отклик.
В общем ответ ясен!

Извиняюсь, что забыл про версию - это важно. ASE 12.5.4

В версии 15 используется deferred compillation, которая позволяет сначала определить результат функции
("Забыл Пароль" большое спасибо за пример, который хорошо подтверждает)

В 12.5 по идее должна быть выбрана default selectivity, т.к. результат функции на этапе компилляции не известен.
("cherrex_Den" спасибо за этот вариант).

Но с другой стороны, в последних версиях 12.5 оптимизатор ведёт себя не всегда согласно докам.

Поэтому интересно какую селективность покажет трассировка.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / использование функций в SARG
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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