Главная страница
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.026 c
14-1081367620
ginfonic
2004-04-07 23:53
2004.05.02
Продам труды Архангельского по Delphi 7


1-1081935426
Аноним
2004-04-14 13:37
2004.05.02
Время с миллисекундами


3-1081239661
Akmen
2004-04-06 12:21
2004.05.02
Как избавиться от Too many open files?


1-1082096797
Litva
2004-04-16 10:26
2004.05.02
помогите новенкой...


6-1078826063
knack
2004-03-09 12:54
2004.05.02
как узнать подключен или нет протокол TCP/IP?