Можно ли запросить таблицу, используя ALL_TABLES, чтобы получить счетчик - ORACLE - PullRequest
0 голосов
/ 25 января 2019

Мне нужен более быстрый способ подсчета определенных записей в большой таблице, содержащей более 11 миллиардов строк. Я запускаю запрос ниже, и он получает счет в 1 секунду из 11 + миллиардов строк

SELECT a.TABLE_NAME, to_char ( a.NUM_ROWS ), b.COLUMN_NAME
FROM ALL_TABLES a, ALL_TAB_COLUMNS b
WHERE a.table_name = 'OBJECT_TABLE' 
and a.TABLE_NAME = b.TABLE_NAME 
and b.owner = 'XX_ST'
and b.COLUMN_NAME = 'OBJECT_TYPE'

Результат: OBJECT_TABLE 11042049900 OBJECT_TYPE

Я хочу запросить OBJECT_TABLE и получить только некоторые OBJECT_TYPES, но не все. Если я запускаю такой запрос, это займет очень много времени

SELECT count (*)
FROM OBJECT_TABLE a
WHERE a.OBJECT_TYPE in ( 425, 989 ).

Из этого запроса я бы ожидал 100 000 из 11 + миллиардов строк.

Есть ли способ использовать ALL_TABLES a, ALL_TAB_COLUMNS b для ускорения выполнения запроса, чтобы ТОЛЬКО получить определенные строки, но не все из определенной таблицы?

Любая помощь приветствуется

1 Ответ

0 голосов
/ 25 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...