|
06.05.2011, 09:57 | #1 |
Возьми свет!!!
|
Когда строиться план запроса в query или в queryRun
В какой момент строиться план запроса, т.е. имеет ли какой либо смысл скажем для оптимизации хранить query а затем по нему просто вызывать конструктор queryRun при условии что ограничение на другие поля у меня не устанавливается, меняются только значения ограничений.
Насколько я помню query и queryRun это динамические запросы а план по ним не кэшируется? Я прав или нет?
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! Последний раз редактировалось Murlin; 06.05.2011 в 10:02. |
|
06.05.2011, 10:08 | #2 |
Участник
|
|
|
06.05.2011, 10:09 | #3 |
Участник
|
строка sql-запроса отсылается на сервер в момент первого queryRun.next()
по идее в этот же момент должен строится план запроса. но нужно учитывать эффекты кэширования планов запроса (кэширование делает SQL) аксапта по-умолчанию посылает запросы с плейсхолдерами"sql myfield from mytable where mytable.myfield = '%1'". если sql видит, что такой запрос уже выполнялся, то может использовать уже скомпилированный ранее план запроса. Последний раз редактировалось mazzy; 06.05.2011 в 10:46. Причина: тьфу, плейсхолдерами, конечно. |
|
06.05.2011, 10:51 | #4 |
Участник
|
Цитата:
Да и поведение по умолчанию может зависить от настроек PS Упс, уже исправил
__________________
Axapta v.3.0 sp5 kr2 |
|
06.05.2011, 10:42 | #5 |
Участник
|
Аксапта и сама может компилировать запросы (насчет Oracle не знаю, но в MS SQL точно - с использвоанием sp_cursorprepexec), а потом использовать их повторно (sp_cursorexecute).
Вот только напрямую этим нельзя управлять. Ядро сам решает, когда это делать. Единственно, что можно - это обязательно использовать плейсхолдеры для циклических запросов
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
06.05.2011, 11:04 | #6 |
Moderator
|
Цитата:
Сообщение от AndyD
Аксапта и сама может компилировать запросы (насчет Oracle не знаю, но в MS SQL точно - с использвоанием sp_cursorprepexec), а потом использовать их повторно (sp_cursorexecute).
Вот только напрямую этим нельзя управлять. Ядро сам решает, когда это делать. Единственно, что можно - это обязательно использовать плейсхолдеры для циклических запросов |
|