powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как ускорить select count(*) from table
25 сообщений из 107, страница 3 из 5
Как ускорить select count(*) from table
    #39525782
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLerНикакой. Окажись я на месте ТСа ответил бы 4378823478969123469. Пусть проверяют.

Ну разница eсть. Пример. Разработчики тестируют Informatica workflow. Лог показывает чтение source идет со скоростью N строк в секунду. Это хорошо или плохо? Не зная числа строк в production source мы не можем эстраполировать время выполнения workflow в production. Так-что приходится давать разработчикам числo строк. Правда микроны тут не нужны и NUM_ROWS от dbms_stats вполне достаточно.

SY.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39525823
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Но это обычно для 1-10 таблиц, а не для всей базы. 10-ки таблиц справочники с устоявшимся набором данных и число ВСЕХ строк в таблицах величина абстрактная но никому не нужная =(. Во всяком случае я не могу себе придумать задачу где мне такое может понадобиться. И что делать с вьюхами - ума не приложу.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39525867
murzus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYXMLerНикакой. Окажись я на месте ТСа ответил бы 4378823478969123469. Пусть проверяют.

.. приходится давать разработчикам числo строк. Правда микроны тут не нужны и NUM_ROWS от dbms_stats вполне достаточно.

SY.
Это если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39525875
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
murzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно.
А что мешает больше ресурсов выделять на сбор статистики? Что count постоянный гонять, что это, а от статистики может еще какая польза будет. Ну или вред. :)
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39525880
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
murzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно.

А это зависит от COUNT(*). Разница в 100K для таблицы в 100M роли не играет а вот для таблицы в 1M да, и если у тебя по такой растущей таблице статистика не сибирается то у тебя похоже куда больше проблем чем счет строк.

SY.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39525890
murzus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевmurzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно.
А что мешает больше ресурсов выделять на сбор статистики? Что count постоянный гонять, что это, а от статистики может еще какая польза будет. Ну или вред. :)
Маэмо, що маэмо)
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39525898
murzus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYmurzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно.

А это зависит от COUNT(*). Разница в 100K для таблицы в 100M роли не играет а вот для таблицы в 1M да, и если у тебя по такой растущей таблице статистика не сибирается то у тебя похоже куда больше проблем чем счет строк.

SY.

Это был пример, таблиц куча , и разница не устраивает. Вы пытаетесь помочь решить задачу организационно, но цель топика найти техническое решение. Задача если что уже решена, хотел просто узнать -может кто-то уже сталкивался и как-то ускорил.
Но пока ничего нет, кроме как считать индексы или методы типа бить таблицу и считать параллельно(мэп-редьюс).
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39525982
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ради бога:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SELECT  OWNER,
        TABLE_NAME,
        XMLCAST(
                XMLQUERY(
                         '/ROWSET/ROW/CNT'
                         PASSING DBMS_XMLGEN.GETXMLTYPE(
                                                        'SELECT  COUNT(*) CNT
                                                           FROM  "' || OWNER || '". "' || TABLE_NAME || '"'
                                                       )
                         RETURNING CONTENT
                        )
                AS NUMBER
               ) ROW_COUNT
  FROM  DBA_TABLES T
  WHERE OWNER = '&SCHEMA_NAME'
    AND TABLE_NAME NOT LIKE 'MLOG$\_%' ESCAPE '\' -- exclude materialized view logs
    AND NVL(IOT_TYPE,'NOT_IOT') NOT IN ('IOT_OVERFLOW','IOT_MAPPING') -- exclude IOT overflow and mapping
    AND TEMPORARY = 'N' -- exclude temporary tables
    AND SECONDARY = 'N' -- exclude Oracle Text index tables and other "non-tables"
    AND TABLE_NAME NOT IN (
                           SELECT  E.TABLE_NAME
                             FROM  DBA_EXTERNAL_TABLES E
                             WHERE E.OWNER = T.OWNER
                          ) -- exclude external tables
  ORDER BY OWNER,
           TABLE_NAME
/



SY.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526623
mishga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orcl_1989Вариант с count(*) в oracle самый медленный, лучше использовать count(1) - я предпочитаю, хотя по производительности от count(ID) и count(поле) сильно не отличается.

Между count(1) и count(*) нет разницы. Вот статья от Кайта: https://asktom.oracle.com/pls/apex/f?p=100:11:1337911574066::NO::P11_QUESTION_ID:1156159920245
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526633
mishga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
murzusЭто был пример, таблиц куча , и разница не устраивает. Вы пытаетесь помочь решить задачу организационно, но цель топика найти техническое решение. Задача если что уже решена, хотел просто узнать -может кто-то уже сталкивался и как-то ускорил.
Но пока ничего нет, кроме как считать индексы или методы типа бить таблицу и считать параллельно(мэп-редьюс).
Ну еще вариант, завести регистровую таблицу с двумя столбцами (имя таблицы, кол-во строк) и прицепить к каждой таблице а БД триггер, который при инсерте будет инкременировать, при делите декрементировать кол-во в строке рестровой таблицы для соответствующей таблицы. Тогда простой селект по регистровой таблице будет мгновенно давать результат :) Но с правами только на селект не получится, разумеется. И это изврат, имхо.
А все-таки какова была цель у этой задачи? Для чего это было нужно, если не секрет?
И каково было таинственное уникальное решение?
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526643
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishgaНу еще вариант, завести регистровую таблицу с двумя столбцами (имя таблицы, кол-во строк) и прицепить к каждой таблице а БД триггер, который при инсерте будет инкременировать, при делите декрементировать кол-во в строке рестровой таблицы для соответствующей таблицы.Открой для себя dba_tab_modifications, велосипедостроитель.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526644
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishgaНу еще вариант, ...


и все станут в очередь за номерком

.....
stax
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526667
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba_tab_modification я бы сказал неоднозначная штука. там без явного DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO она не то чтобы мгновенно обновляется.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526685
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishgaприцепить к каждой таблице а БД триггер
Фи.
Триггер может быть тихо отключен (как явно, так и в ходе direct-операции), после чего данные в "реестре" потеряют адекватность, никому ничего не сказав.
Если уж очень хочется извратиться - слепите доменный индекс или агрегатное мат. вью.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526708
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtockdba_tab_modification я бы сказал неоднозначная штука. там без явного DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO она не то чтобы мгновенно обновляется.Неоднозначно то, что для минимизации дополнительных издержек надо идти на компромиссы?
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526922
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Важно, чтобы топикстартер видел эти компромиссы
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526968
murzus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mishgaНу еще вариант, завести регистровую таблицу с двумя столбцами (имя таблицы, кол-во строк) и прицепить к каждой таблице а БД триггер, который при инсерте будет инкременировать, при делите декрементировать кол-во в строке рестровой таблицы для соответствующей таблицы. Тогда простой селект по регистровой таблице будет мгновенно давать результат :) Но с правами только на селект не получится, разумеется. И это изврат, имхо.
А все-таки какова была цель у этой задачи? Для чего это было нужно, если не секрет?
И каково было таинственное уникальное решение?
А все-таки какова была цель у этой задачи? - посчитать кол-во строк.
Для чего это было нужно, если не секрет? -для расчета ресурсов.
И каково было таинственное уникальное решение? - Никакого уникального, loop + execute immediate + count(*). Это долго отсюда и вопрос.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526974
murzus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shtockdba_tab_modification я бы сказал неоднозначная штука. там без явного DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO она не то чтобы мгновенно обновляется.
Тоже не подходит, нужно считать по факту, без затей и всяких "ловушек"
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526990
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
murzus Для чего это было нужно, если не секрет? -для расчета ресурсов.


А, извините, ресурсов чего?
Если у меня таблица из 2 ID колонок - 10 млн строк и таблица с CLOB в 10 млн строк это разные ресурсы, как по мне, хоть и ответ одинаковый 10 млн.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39526995
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLmurzus Для чего это было нужно, если не секрет? -для расчета ресурсов.
А, извините, ресурсов чего?
Если у меня таблица из 2 ID колонок - 10 млн строк и таблица с CLOB в 10 млн строк это разные ресурсы, как по мне, хоть и ответ одинаковый 10 млн.Да ему до фонаря. Кретин задачу поставил - дебил задачу исполнил. Дальше хоть трава не расти.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39527004
MaximaXXLхоть и ответ одинаковый 10 млн.Пока считается каунт, пока считаются ресурсы по результатам каунтов, пока по результатам расчетов ... что-то предпринимается, строк у же не одинаково - в одной таблице 10000001, а в другой 9999999 строк. Бегом пересчитывать!
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39527013
Ломоносов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
однако за время пути собака ...Пока считается каунт, пока считаются ресурсы по результатам каунтов, пока по результатам расчетов ... что-то предпринимается, строк у же не одинаково - в одной таблице 10000001, а в другой 9999999 строк. Бегом пересчитывать!

если где-то удалилась запись, значит в какой-нибудь таблице она добавилась.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39527242
murzus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYДа ради бога:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SELECT  OWNER,
        TABLE_NAME,
        XMLCAST(
                XMLQUERY(
                         '/ROWSET/ROW/CNT'
                         PASSING DBMS_XMLGEN.GETXMLTYPE(
                                                        'SELECT  COUNT(*) CNT
                                                           FROM  "' || OWNER || '". "' || TABLE_NAME || '"'
                                                       )
                         RETURNING CONTENT
                        )
                AS NUMBER
               ) ROW_COUNT
  FROM  DBA_TABLES T
  WHERE OWNER = '&SCHEMA_NAME'
    AND TABLE_NAME NOT LIKE 'MLOG$\_%' ESCAPE '\' -- exclude materialized view logs
    AND NVL(IOT_TYPE,'NOT_IOT') NOT IN ('IOT_OVERFLOW','IOT_MAPPING') -- exclude IOT overflow and mapping
    AND TEMPORARY = 'N' -- exclude temporary tables
    AND SECONDARY = 'N' -- exclude Oracle Text index tables and other "non-tables"
    AND TABLE_NAME NOT IN (
                           SELECT  E.TABLE_NAME
                             FROM  DBA_EXTERNAL_TABLES E
                             WHERE E.OWNER = T.OWNER
                          ) -- exclude external tables
  ORDER BY OWNER,
           TABLE_NAME
/



SY.

SY по скорости одинаково, но уже одним select-ом . Спасибо.
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39527370
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousагрегатное мат. вью.

UNION ALL

C Триггерами тоже забавно. Давайте тогда уже берите Кафку и стримьте дельту в Хадуп и будет реалтайм но латенси каунт :) (Хотя некоторые ентерпрайзы и не до такого додумываются)
...
Рейтинг: 0 / 0
Как ускорить select count(*) from table
    #39527483
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
murzusSYДа ради бога:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SELECT  OWNER,
        TABLE_NAME,
        XMLCAST(
                XMLQUERY(
                         '/ROWSET/ROW/CNT'
                         PASSING DBMS_XMLGEN.GETXMLTYPE(
                                                        'SELECT  COUNT(*) CNT
                                                           FROM  "' || OWNER || '". "' || TABLE_NAME || '"'
                                                       )
                         RETURNING CONTENT
                        )
                AS NUMBER
               ) ROW_COUNT
  FROM  DBA_TABLES T
  WHERE OWNER = '&SCHEMA_NAME'
    AND TABLE_NAME NOT LIKE 'MLOG$\_%' ESCAPE '\' -- exclude materialized view logs
    AND NVL(IOT_TYPE,'NOT_IOT') NOT IN ('IOT_OVERFLOW','IOT_MAPPING') -- exclude IOT overflow and mapping
    AND TEMPORARY = 'N' -- exclude temporary tables
    AND SECONDARY = 'N' -- exclude Oracle Text index tables and other "non-tables"
    AND TABLE_NAME NOT IN (
                           SELECT  E.TABLE_NAME
                             FROM  DBA_EXTERNAL_TABLES E
                             WHERE E.OWNER = T.OWNER
                          ) -- exclude external tables
  ORDER BY OWNER,
           TABLE_NAME
/



SY.

SY по скорости одинаково, но уже одним select-ом . Спасибо.
Насчет одного селекта, вроде бы и правильно, но улыбает =)
...
Рейтинг: 0 / 0
25 сообщений из 107, страница 3 из 5
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как ускорить select count(*) from table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]