Всем добрый день.
Довольно часто возникает необходимость понять сколько записей в той или иной таблице.
В принципе, если таблица небольшая то можно просто написать select count(1) from table и в качестве результата увидим количество записей.
Но бывают случаи, когда размер таблицы достаточно большой (несколько десятков гигабайт). Тогда в таком случае вышеуказанная операция становиться затратна по времени выполнения.
Как же быть в таком случае?
В таком случае нам на помощь приходит функция — ATTRN
Приведем пример использования данной функции:
Возьмем табличку на несколько миллионов записей:
Многие используют опцию nobs:
И мы видим, что в макро переменную nobs записалось количество строк в таблице — 8 671 962.
А теперь давайте проведем следующий эксперимент:
Возьмем и удалим половину записей, а именно все что больше 4 миллионов:
И теперь опять посмотрим сколько у нас записей в таблице:
И что мы видим?! А видим мы, что кол-во записей не изменилось.
Почему же так?
А дело тут в том, что nobs показывает кол-во физических строк, в том числе и помеченных как удаленные.
От сюда вывод, что nobs лучше не пользоваться.
Тогда возникает вопрос, а чем же пользоваться для определения кол-ва записей ???
И на этот вопрос также есть ответ — NLOBS параметр — показывает кол-во логических записей:
Так что пользуйтесь!