Показать сообщение отдельно
Старый 25.06.2004, 17:21   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1850 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Нюансов много. Например, для простого SELECT TABLE1 значение для (FAST n) считается как Buffer size / длина записи

Buffer size - это параметр Buffer Size в Configuration Utility на закладке Database. В 2.5. и 3.0 значение по умолчанию - 24 Кб

Длина записи - сумма длин ее полей

Т.е. если создать таблицу TABLE1 с одним строковым полем длиной 1000 байт, запрос

PHP код:
SELECT TABLE1
даст OPTION(FAST 24) в профайлере

Изменим длину поля до 500 символов - получим OPTION(FAST 48)

Как точно считается - учитывается ли длина системных полей, как округляется, как учитывается длина контейнерных полей, не выяснял, не вижу в этом смысла

Для
PHP код:
SELECT FIRSTONLY 
вроде бы всегда делается (FAST 2), есть возможность хинтами заменять на TOP, но работает, как ни странно, медленнее, чем FAST

И т.д. и т.п. Идея, видимо, в том, чтобы максимально быстро получить первую пачку записей и отобразить ее в Grid-е. Кто, когда и как в Дамгарде рассчитал, что в среднестатистический Grid помещается 24Кб - тайна, покрытая мраком

есть хороший документ от 2.5 про Cost-based optimizer и Databases Advanced от 3.0