Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Вниз

Как определить число записей в DataSet без FetchAll?   Найти похожие ветки 

 
Карелин Артем   (2002-11-28 11:53) [0]

Есть хранимая процедура для выбора данных из нормализованной таблицы и кучи справочников. Есть кверь, который выбирает нужные данные из ХП. Как быстрее определить сабж??
Я правильно понимаю, что на отдельный запрос типа select count будет требоваться столько же времени, как и на FetchAll??


 
Alexandr   (2002-11-28 11:55) [1]

нет меньше
по сетке данные не надо передавать как минимум
Но одинакого в любом случае не будет.


 
exit   (2002-11-28 11:56) [2]

Число записей в DataSet - DataSet.RecordCount;
Число записей в таблице SELECT COUNT(*) FROM TABLE


 
Prooksius   (2002-11-28 12:03) [3]

В FIBPlus есть такая штука, определять число записей при планировании. Попробуй, может с ХП будет работать.
Я там наткнулся на такую бяку, что при явном указании плана запроса эта функция не корректно работает - пишет ошибку, мол, такой план запроса использовать нельзя. Если ее отключить, то план вдруг резко становится нормальным. Я не разбирался, в чем проблема, т.к. м.б. ее уже пофиксили (я пользуюсь бесплатными комп., но старыми)
Вопрос 2: нет. На фетчинг надо тоже попределенное времмя. Если На Prepare тратится время гораздо больше, чем на фетчинг (сложная ХП или запрос), то ты практически прав, в противном случае - нет.


 
Карелин Артем   (2002-11-28 12:05) [4]

>>Число записей в DataSet - DataSet.RecordCount;
Это работает правильно после вызова FetchAll


 
exit   (2002-11-28 12:07) [5]

2Prooksius © >
> Вопрос 2: нет. На фетчинг надо тоже попределенное времмя.
> Если На Prepare тратится время гораздо больше, чем на фетчинг
> (сложная ХП или запрос), то ты практически прав, в противном
> случае - нет.
В чем же это он прав? В том, что получить все записи и получить одну запись (count) - одно и то же?


 
exit   (2002-11-28 12:11) [6]

2Карелин Артем © >
> >>Число записей в DataSet - DataSet.RecordCount;
> Это работает правильно после вызова FetchAll
Спасибо, что подсказал. Я для того и разделил эти два понятия, чтобы подчеркнуть: Число записей DataSet - не есть число записей в таблице.


 
Карелин Артем   (2002-11-28 12:17) [7]

Масштаб такой: база на 1-20 мулей записей. ХП возвратит от 1 муля(редко будет) до порядка 20 000 записей. Кверь возвратит от одной записи до нескольких тысяч. Такое не делал, вот и спрашиваю.
P.S. Ведь хочется быстро. Ну а про индексы я не забываю.


 
Prooksius   (2002-11-28 12:17) [8]

2 exit (28.11.02 12:07)
А в том прав, что если время планирования запроса гораздо больше времени фетчинга всех записей запроса с сервера, то временем фетчинга можно пренебречь. И в том и в другом случае остается только планирование - одно и то же.
Или я не прав?


 
Alexandr   (2002-11-28 12:25) [9]

2Карелин Артем ©
ты испытывал быстродействие своей программы на 20млн записей в таблице.
Тебя может ожитать большой сюрприз ;)
Если что - тоже в мыло.


 
Карелин Артем   (2002-11-28 12:27) [10]

Время планирования пока больше фетчинга. Но это на около 1000 записей в главной таблице и по 200-300 в справочниках.
Если время планирования не растет с числом записей, то фетчинг будет идти заметно дольше.
Растет ли время подготовки при увеличении масштаба? Я думаю нет, но полной уверенности нет.


 
Карелин Артем   (2002-11-28 12:29) [11]

>>ты испытывал быстродействие своей программы на 20млн записей в таблице.
Индексы нам помогут. Я верю в них.


 
exit   (2002-11-28 12:34) [12]

2Prooksius © >

> А в том прав, что если время планирования запроса гораздо
> больше времени фетчинга всех записей запроса с сервера,
> то временем фетчинга можно пренебречь. И в том и в другом
> случае остается только планирование - одно и то же.
> Или я не прав?


Что-то я ничего не видел в вопросе про планирование...


> Я правильно понимаю, что на отдельный запрос типа select
> count будет требоваться столько же времени, как и на FetchAll??

Отвечаю: нет, нет и НЕТ. Потому как кроме "планирования" потребуется еще и время на доставку всех этих записей, о чем нам уже говорил Alexandr ©.


 
Alexandr   (2002-11-28 12:35) [13]

1) при увеличении количества записей время препаре не изменится.
2) Попробуй. Где-то с миллиона пойдет нелинейное уменьшение скорости, плавно переходящее в вечный тормоз.
3) Хреново ты , видать испытывал Firebird прежде чем применить его в таком супер глобальном проекте.
Вообщем, видит бог не я первый про мыло начал. Так что, в мыло.


 
Prooksius   (2002-11-28 13:12) [14]

2 exit (28.11.02 12:34)
Блин! Объясняю еще раз.
При отправке запроса на SQL сервер этот запрос сначала планируется (компилится сервером)/(делается его Prepare)
Уже потом фетчатся записи по запросу от клиента.
Если время планирования больше в сравнении с временем фетчинга записей, то что FetchAll, что select count - одна малина, время практически одинаковое.


> Что-то я ничего не видел в вопросе про планирование...

Теперь видишь? Планирование (prepare, компилирование) запроса - неотъемлимая часть отработки поданного серверу запроса.


 
Карелин Артем   (2002-11-28 13:16) [15]

>>Если время планирования больше в сравнении с временем фетчинга записей, то что FetchAll, что select count - одна малина, время практически одинаковое.

В том и дело, что фетчинг долго может идти иногда.


 
Prooksius   (2002-11-28 13:32) [16]

2 Карелин Артем © (28.11.02 13:16)
Если ты работаешь не через FIBPlus, для интереса кинь на форму pFIBDatabase, pFIBTransaction, pFIBDataSet и попробуй в опциях установить определять кол-во записей при Prepare. Может, это будет быстрее, чем все остальное. Я не пробовал с ХП...


 
Карелин Артем   (2002-11-28 13:38) [17]

Материалы не совсем в тему, но близко:
http://www.ibase.ru/devinfo/delmany.htm
http://www.ibase.ru/devinfo/calcindex.htm
http://www.ibase.ru/devinfo/instest.htm
http://www.ibase.ru/devinfo/idx_cost.htm
http://www.ibase.ru/devinfo/hddspeed.htm
http://www.ibase.ru/mail.htm


 
exit   (2002-11-28 13:44) [18]

2Prooksius ©>

> Блин! Объясняю еще раз.
> При отправке запроса на SQL сервер этот запрос сначала планируется
> (компилится сервером)/(делается его Prepare)
> Уже потом фетчатся записи по запросу от клиента.
> Если время планирования больше в сравнении с временем фетчинга
> записей, то что FetchAll, что select count - одна малина,
> время практически одинаковое.

Не надо нервничать. Я просто никак в толк не возьму: зачем рассказывать прописные истины своими словами? Об этом умные люди книги написали. Надо полагать, товарищ Prooksius © прежде чем послать запрос, осведомляется у "SQL сервер": "А как у нас там с "временем планирования", можно ли сделать FetchAll? Мне бы таким образом количество записей в DataSet хотелось бы узнать. Или все же придется отдельным запросом SELECT count(*).". А можно узнать сколько он такую пургу будет планировать?


 
Prooksius   (2002-11-28 13:56) [19]

2 Карелин Артем © (28.11.02 13:16)
Не, я не прав. Вот сейчас проверил. Эта опция (psAskRecordCount) просто делает select count. Отпадает...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
7-51972
Ketmar
2002-10-13 15:39
2002.12.16
Terminal Services Client (ActiveX) - автоввод пароля - как?


14-51885
time2cru$h
2002-11-23 11:44
2002.12.16
тема


1-51746
Alexei113
2002-12-03 23:05
2002.12.16
Помогите с контекстным меню...


1-51819
kingdom
2002-12-04 17:38
2002.12.16
Как вызвать диалог добавления пользователей в группу?


1-51694
BALU1111
2002-12-02 14:31
2002.12.16
Модальные окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский