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