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

Вниз

Как узнать кол-во записей в запросе програмно?   Найти похожие ветки 

 
White ©   (2004-04-01 19:57) [0]

Через Query забираются записи из таблицы (процедуры) следут узнать сколько записей возвращает запрос. Как узнать.


 
Vlad ©   (2004-04-01 20:10) [1]


> White ©   (01.04.04 19:57)  

Часто Query.RecordCount помогает :-)


 
Vemer ©   (2004-04-02 00:08) [2]

Только FetchAll сделать не забудь.


 
DrPass ©   (2004-04-02 00:16) [3]

А умнее будет сперва выполнить аналогичный запрос, только с агрегатом count(*)


 
Ozone ©   (2004-04-02 07:27) [4]

TO DrPass ©[3]
Не согласен.


 
Кщд   (2004-04-02 08:49) [5]

Ozone ©   (02.04.04 07:27) [4]
так аргументируй


 
Sergey_Masloff   (2004-04-02 09:32) [6]

Ozone ©   (02.04.04 07:27) [4]
>Не согласен.
А зря. Конечно, если запрос очень "тяжелый" а возвращает гарантировано немного записей то RecordCount сойдет. Если запросом может быть select * from XXX то однозначно Count(*) так при фетче пары миллионов записей на клиента будет как минимум зависание а может и у датасета "морда треснуть"


 
Vemer ©   (2004-04-02 09:42) [7]

Еще быстрее будет Counnt(ID_Field).


 
Sergey_Masloff   (2004-04-02 09:51) [8]

Vemer ©   (02.04.04 09:42) [7]
>Еще быстрее будет Counnt(ID_Field).
Нет будет медленнее так как сервер будет проверять поле на NULL даже если оно объявлено как NOT NULL. Вернее не всякий сервер это будет проверять но в лучшем случае выйдет на скорость select count(*)

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


 
Ozone ©   (2004-04-02 10:20) [9]

TO Sergey_Masloff[6]
Я имел в виду вариант когда нужно "SELECT <not *> FROM ..."


 
Anatoly Podgoretsky ©   (2004-04-02 10:26) [10]

Sergey_Masloff   (02.04.04 09:32) [6]
Это только один аспект, а главный состоит в том, что два отдельных запроса в принципе совсем неправильно, количество записей может оказаться разным, точнее даже стоит считать, что оно разное. Речь не про однопользовательскую систему и не про систему с мелкой нагрузкой, а скажем про нормальную боевую систему. А вот RecordCount ошибки не даст, и не надо про большое количество записей, это тоже в принципе неверная работа, да и сомнение в данном счетчике как то не чувствуется.


 
Vlad ©   (2004-04-02 10:32) [11]

Действительно, кол-во записей может меняться постоянно, поэтому данные первого запроса (select count) могут быть не актуальными для второго (с основной выборкой). Тогда уж надо блокировать таблицу или делать соответствующий уровень изоляции транзакции.


 
Sergey_Masloff   (2004-04-02 10:39) [12]

Anatoly Podgoretsky ©, Vlad ©
Да я конечно знаю про этот момент. Я имею в виду вариант когда нужно узнать приблизительно кол-во записей. Обычно я делаю так: делаю select count(*) если количество - тысячи (сотни - настраивается) то отлуп "Критерий поиска не эффективен". Если немного то основной запрос и RecordCount. А так у нас справочник клиентов - миллионы (Vlad, ну ты ж знаешь ;-)) и какой-нибудь селект с like может и пару сотен тысяч притащить легко...


 
Vlad ©   (2004-04-02 10:42) [13]


> Sergey_Masloff   (02.04.04 10:39) [12]


> Vlad, ну ты ж знаешь ;-))

Знаю, знаю :-)
Только вот никак не могу придумать ситуацию когда жизненно необходимо вычислять Count для таких справочников...
;-)



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

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
1-1082036673
Ruslan
2004-04-15 17:44
2004.05.02
Как в ListView закрасить строки разным цветом?


14-1081392375
Думкин
2004-04-08 06:46
2004.05.02
С днем рождения! 8 апреля.


3-1080982304
sssss
2004-04-03 12:51
2004.05.02
Create Table


14-1081839758
Ik
2004-04-13 11:02
2004.05.02
Проблема с Wingate


14-1081351546
Сатир
2004-04-07 19:25
2004.05.02
Артемий Лебедев отдыхает!:)