25.06.2004, 16:16 | #1 |
Участник
|
Управление опциями SQL запроса
При трассировке запросов, посылаемых Axapta на MS SQL Server, можно увидеть, что в конце запроса присутствует конструкция OPTION(FAST 20) либо OPTION(FAST 1). Кто-нибудь знает инструмент Axapta для управления добавлением/удалением этой инструкции.
|
|
25.06.2004, 16:47 | #2 |
Administrator
|
Так Axapta передает ожидаемое количество строк, которые вернет запрос. У меня иногда бывает и FAST 60, например.
Управлять этим параметром можно в очень ограниченном объеме: если select передать firstfast, то на сервер уйдет FAST 1; firstonly у меня почему-то преобразуется в FAST 2.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
25.06.2004, 16:50 | #3 |
Участник
|
А каким образом получилось 60, Вы что-нибудь для этого делали?
|
|
25.06.2004, 16:58 | #4 |
Administrator
|
Я сделал запрос с LIKE (то есть запрос Axapta не сводила к Index Seek, а делала полный перебор) по таблице LedgerTable.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
25.06.2004, 17:21 | #5 |
Модератор
|
Нюансов много. Например, для простого SELECT TABLE1 значение для (FAST n) считается как Buffer size / длина записи
Buffer size - это параметр Buffer Size в Configuration Utility на закладке Database. В 2.5. и 3.0 значение по умолчанию - 24 Кб Длина записи - сумма длин ее полей Т.е. если создать таблицу TABLE1 с одним строковым полем длиной 1000 байт, запрос PHP код:
Изменим длину поля до 500 символов - получим OPTION(FAST 48) Как точно считается - учитывается ли длина системных полей, как округляется, как учитывается длина контейнерных полей, не выяснял, не вижу в этом смысла Для PHP код:
И т.д. и т.п. Идея, видимо, в том, чтобы максимально быстро получить первую пачку записей и отобразить ее в Grid-е. Кто, когда и как в Дамгарде рассчитал, что в среднестатистический Grid помещается 24Кб - тайна, покрытая мраком есть хороший документ от 2.5 про Cost-based optimizer и Databases Advanced от 3.0 |
|
28.06.2004, 11:19 | #6 |
Участник
|
> Databases Advanced от 3.0
имя файла и где лежит? Заранее благодарен. |
|
28.06.2004, 11:28 | #7 |
Модератор
|
|
|
08.02.2006, 11:23 | #8 |
злыдень
|
А есть ли возможность каким либо образом, программно, заставить аксапту отключить этот идиотский хинт OPTION() для определенного запроса???
Через квериран или селект или ещё, хоть как ни-ть???
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
08.02.2006, 13:36 | #9 |
Участник
|
Как отключить для одного запроса не знаю, но можно выключить и включить для всего соединения
X++: SqlSystem sqlSystem = new SqlSystem(); int hints; ; hints = SqlSystem::databaseHints(); SqlSystem::databaseHints(hints & 0xfffd); // ваш select или QueryRun SqlSystem::databaseHints(hints);
__________________
Axapta v.3.0 sp5 kr2 |
|
20.02.2007, 19:52 | #10 |
Участник
|
Цитата:
Сообщение от AndyD
Как отключить для одного запроса не знаю, но можно выключить и включить для всего соединения
X++: SqlSystem sqlSystem = new SqlSystem(); int hints; ; hints = SqlSystem::databaseHints(); SqlSystem::databaseHints(hints & 0xfffd); // ваш select или QueryRun SqlSystem::databaseHints(hints); При работе на клиенте - все равно, а вот если код исполняется на сервере приложения, то запуск такого кода из под одного пользователя не повляияет ли на работу других ? |
|
Теги |
databasehints, fast, option, sql |
|
|