Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
14-1120057000
Andy BitOff
2005-06-29 18:56
2005.07.25
ОАО «Поддельные дипломы»


10-1098088993
inkarik
2004-10-18 12:43
2005.07.25
Автоматизация Office


4-1117137483
cherrex
2005-05-26 23:58
2005.07.25
OCR для DELPHI


1-1120656537
denissoft
2005-07-06 17:28
2005.07.25
MQL4


1-1120814383
yuran
2005-07-08 13:19
2005.07.25
Как определить что пользователь начал обращаться к дисководу?