|
использование функций в SARG
|
|||
---|---|---|---|
#18+
Господа, всем доброе время суток. Такой вопрос - если 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 доступа, чтобы проверить. Если кто-нибудь проверял, поделитесь результатом. Заранее спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 21:26 |
|
использование функций в SARG
|
|||
---|---|---|---|
#18+
Чего-чего? Кто такой SARG? И зачем он использует несчастную функцию? О мелочах типа сервера я уже молчу... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 22:50 |
|
использование функций в SARG
|
|||
---|---|---|---|
#18+
Kru, Судя по всему речь идет об ASE. В таких случаях бывает два варианта: 1) Оптимизатор пойдет по индексу, но не position by key , а at start index . Так как, заранее неизвестен ваш SARG(search argument). 2) Если оптимизатор расценит что вариант 1 затратней, чем table scan, то будет table scan. Но такое бывает редко, и в основном на "узких" таблицах с небольшим количеством строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 23:35 |
|
использование функций в SARG
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2012, 17:25 |
|
использование функций в SARG
|
|||
---|---|---|---|
#18+
Kru, Кстати, ДА, лопухнулся я! если так: where char_4_field = trim('abcd ') то position by key если так: where trim(char_4_field) = 'abcd ' то at start index ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2012, 19:01 |
|
использование функций в SARG
|
|||
---|---|---|---|
#18+
Всем большое спасибо за отклик. В общем ответ ясен! Извиняюсь, что забыл про версию - это важно. ASE 12.5.4 В версии 15 используется deferred compillation, которая позволяет сначала определить результат функции ("Забыл Пароль" большое спасибо за пример, который хорошо подтверждает) В 12.5 по идее должна быть выбрана default selectivity, т.к. результат функции на этапе компилляции не известен. ("cherrex_Den" спасибо за этот вариант). Но с другой стороны, в последних версиях 12.5 оптимизатор ведёт себя не всегда согласно докам. Поэтому интересно какую селективность покажет трассировка. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2012, 19:17 |
|
|
start [/forum/topic.php?fid=55&fpage=16&tid=2010181]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
110ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 221ms |
0 / 0 |