Форум: "Базы";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
ВнизDOA при подсчете кол-ва записей в TOracleDataSet происходит запро Найти похожие ветки
← →
KirillR © (2005-06-02 13:18) [0]Посмотрел как работает свойство CountQueryHits в TOracleDataSet, так оказалось, что происходит повторный запрос к базе следующего вида
select count(*) from (SQL.Text)
причем хинты из SQL.Text удаляются (происходит предварительно какая обработка этого запроса). В итоге налицо 2 минуса: во-первых, выполняется лишний раз запрос, во-вторых, запрос идет без нужных хинтов. Исправил на RecordCount, но все равно в некоторых случаях выполняется запрос select count(*) from (SQL.Text)
Каким образом TOracleDataSet считает записи, как обойтись без лишнего запроса?
← →
Sergey13 © (2005-06-02 13:23) [1]>Каким образом TOracleDataSet считает записи, как обойтись без лишнего запроса?
А это так критично? Может вообще постараться не опираться на количество записей?
← →
KirillR © (2005-06-02 14:45) [2]Без RecordCount или CountQueryHits не обойтись. Эти свойства используются в родительской форме, являющейся предком для очень многих форм.
← →
Sergey13 © (2005-06-02 14:50) [3]2[2] KirillR © (02.06.05 14:45)
Ну тогда чем не катит автозапрос? Тормозит без хинтов что-ли сильно? Может тогда свой приделать как-нибудь, с хинтами. Или разбраться с хинтами и заменить их нужными индексами - может тут есть место для оптимизации.
← →
KirillR © (2005-06-03 10:33) [4]Тормозит без хинтов что-ли сильно?>> да сильно, как раз тот случай, когда ошибается оптимизатор. Нужные индексы соданы
← →
Val © (2005-06-03 10:45) [5]>KirillR © (02.06.05 13:18)
Каким образом TOracleDataSet считает записи, как обойтись без лишнего запроса?
Вы думаете, что есть варианты, как можно посчитать количество записей без запроса count или пробегания по датасету?
По-моему, раз дело в конкретном случае, то стоит посмотреть - где/как выкидываются ваши хинты из запроса, м.б. отключается свойством, либо перекрывать соотв. методы своими...а не париться риторическими вопросами.
← →
Sergey13 © (2005-06-03 11:40) [6]2 [4] KirillR © (03.06.05 10:33)
Ну напиши свою фунцию MyRecordCount где сам сделай
select count(*) from (SQL.Text)
но с хинтами.
← →
Bronco © (2005-06-03 11:52) [7]
> Каким образом TOracleDataSet считает записи, как обойтись
> без лишнего запроса?
Если у тебя QueryAllRecords (кажется так свойство называется) = False, то без доп. запроса уж никак не обойтись. Другое дело, что ты можешь (скажем на AfterOpen) сам давать нужный запрос кол-ва записей с нужными хинтами.
Хотя, в многопользовательском режиме опять же нет гарантии что на момент первого запроса будет записей столько же сколько на момент второго. Т.е. можешь получить ложные данные.
← →
Sergey13 © (2005-06-03 11:55) [8]2[4] KirillR © (03.06.05 10:33)
> да сильно, как раз тот случай, когда ошибается оптимизатор. Нужные индексы соданы
А какой оптимзатор то работает? Может статистика старая или неполная?
← →
KirillR © (2005-06-10 09:47) [9]To Val>Вы думаете, что есть варианты, как можно посчитать количество >записей без запроса count или пробегания по датасету?
C чего вы взяли, что я так думаю. Основной вопрос был в том, можно ли по DataSet"у посчитать кол-во записей (не обращаясь к базе) и в редактировании исх. запроса при выполнении CountQueryHits.
>..либо перекрывать соотв. методы своими...
так лучше и сделать
To Sergey13
>> да сильно, как раз тот случай, когда ошибается оптимизатор. >>Нужные индексы соданы
>А какой оптимзатор то работает? Может статистика старая или >неполная?
Сбор полной статистики с подробными гистограммами не помогает. Тот случай, когда оптимизатор исходит из предположения о независимости предикатов.
> Ну напиши свою фунцию MyRecordCount где сам сделай
>select count(*) from (SQL.Text)
>но с хинтами.
Наверное, лучше так и сделать.
Всем спасибо за ответы
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c