Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизКак узнать кол-во записей в запросе програмно? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c