Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 считает записи, как обойтись без лишнего запроса?
А это так критично? Может вообще постараться не опираться на количество записей?


Наверх

Титульная страница Поиск, карта сайта Написать письмо