как работает Count(...)

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
_sts_
Сообщения: 23
Зарегистрирован: 28 авг 2006, 19:38

как работает Count(...)

Сообщение _sts_ » 01 сен 2006, 18:53

Извините за наивный вопрос, но мне надо срочно...
Мне надо постоянно выяснять текущее кол-во неких строк в базе,
вопрос: грозит ли постоянный вызов SELECT COUNT(FIELD) ...
тормозами, когда база разрастется? Т.е. выполняется ли он простым перебором строк или как-то по-другому? (Блин, где-то ведь читал про это, но как понадобилось - так хрен найдешь где!)
P.S. SELECT SUM(...)- тоже самое?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Re: как работает Count(...)

Сообщение Merlin » 01 сен 2006, 19:33

_sts_ писал(а):Извините за наивный вопрос, но мне надо срочно...
Мне надо постоянно выяснять текущее кол-во неких строк в базе,
вопрос: грозит ли постоянный вызов SELECT COUNT(FIELD) ...
тормозами, когда база разрастется?
А как же. Да ещё и возвращать будет хрен знает что, в concurrency - количество на момент старта, но не запроса, а транзакции (а их там с тех пор полторы тыщи удалили и полмульёна вставили), а в read_commited на длинной выборке не узнает, что половину из того, что уже сощытал, с тех пор поудаляли и закоммитили пока до конца таблицы добрался, а заместо них навставляли полстолька, но ещё не закоммитили.
_sts_ писал(а): Т.е. выполняется ли он простым перебором строк
ога
_sts_ писал(а): или как-то по-другому?
не-а
_sts_ писал(а): (Блин, где-то ведь читал про это, но как понадобилось - так хрен найдешь где!)
В журнале Мурзилка, видать :)
_sts_ писал(а): P.S. SELECT SUM(...)- тоже самое?
не-а. Sum - это сложить, а не сосчитать.

В общем, если агрегаты нужны постоянно - их делают хранимыми. В специятельно для этого создаваемой табличке. Если они нужны с пылу с жару, в онлайне - инкают/декают соответствующую запись в ней на триггерах оперативной таблицы. И разруливают конфликты, потому что вставляюшие-удаляющие транзакции начинают толкаться на записях таблицы агрегатов. И всё равно данные будут слега устаревши - прочитали мы агрегат, а он через микросекунду изменился. А если они нужны на какой-то момент, а потом на них начинаются какие-то расчёты-размышления - то собирают в эту табличку агрегатов либо регламентно, шедулером, либо по требованию. Так что если многопользовательская задача якобы требует постоянно точных онлайн-агрегатов - следует задуматься о консерватории.

_sts_
Сообщения: 23
Зарегистрирован: 28 авг 2006, 19:38

Re: как работает Count(...)

Сообщение _sts_ » 02 сен 2006, 10:51

_sts_ писал(а): Т.е. выполняется ли он простым перебором строк
ога
_sts_ писал(а): или как-то по-другому?
Ага, по-другому: Трах-тибидох, и вот тебе count, о Волька! :lol:

Н-да... перечитал свой вопрос- смешно стало...
Это все - нервы, дата сдачи проекта - как всегда - вчера (знакомо?),FB- только начал разбираться, после любимой BDE слегка ...непривычно! В-общем, закроем топик и будем считать что я его не создавал! (Кстати, насчет отдельной таблички для агрегатов я уже подумывал, теперь пожалуй так и сделаю, спасибо за совет!)

Ответить