Вычислите количество строк в запросе Oracle

#oracle #count #oracle-sqldeveloper

#Oracle #считать #oracle-разработчик sqld

Вопрос:

Существует ли простой способ получить количество строк, возвращаемых SQL-запросом Oracle?

Я пробовал count разными способами, но ни один не сработал. Это, кажется, делает свое дело

 SELECT ROWNUM, mv.* FROM my_view mv where col_a IS NOT NULL order by ROWNUM desc   

но есть ли что-то простое, как nrow в R или .shape в Python?

Ответ №1:

 SELECT count(*) over () as row_count, mv.* FROM my_view mv where col_a IS NOT NULL  

даст вам подсчет, но если вы не можете быть уверены, что производительность не будет проблемой, обычно это плохая идея. Потому что что, если в таблице 1 миллиард строк, и вам нужно показать на экране только первые (скажем) 200 строк? Мы собираемся посетить все ряды кандидатов, чтобы определить это количество.

Вот почему в поиске Google указано «Результаты 1..20 из ПРИМЕРНО …»

Комментарии:

1. Привет, Коннор, спасибо за ответ. Это был хороший совет. Однако мне просто было интересно, какой наилучшей практикой было бы проверить размер представления, например, когда вам нужно сделать перекрестную ссылку на размер запроса в другом источнике. То есть мне не нужно отображать весь вид целиком, а нужно только знать количество строк.

2. Для любого заданного запроса, просто выполнив «выберите количество(*) из ( вашего запроса)», вы получите количество строк, которые вернутся…..но старайтесь этого не делать 🙂

3. Привет, Коннор, спасибо за твой ответ. Могу я спросить, почему это не поощряется?

4. Показывать людям общее количество строк-значит напрашиваться на неприятности по мере увеличения вашей таблицы. Они будут жаловаться, когда вы будете вынуждены удалить его, когда считать их станет непрактично

Ответ №2:

Мне просто было интересно, как лучше всего было бы проверить размер представления ( … ), мне не нужно отображать все представление целиком, мне нужно только знать количество строк.

В таком случае, count(*) похоже, это правильный способ сделать это. Чисто и просто

 SELECT count(*) FROM my_view WHERE col_a IS NOT NULL;  

(Вы использовали order by предложение; оно обещает быть медленнее, чем запрос без него.)


В качестве альтернативы, если бы это была таблица (а не представление), вы могли бы использовать действительно быстрый вариант — запрос user_tables :

 SQLgt; SELECT num_rows  2 FROM user_tables  3 WHERE table_name = 'EVID';   NUM_ROWS ----------  808757  

Сколько строк на самом деле в этой таблице?

 SQLgt; SELECT COUNT (*) FROM evid;   COUNT(*) ----------  808761  SQLgt;  

Не совсем то же самое. Почему? Потому что вы должны собирать статистику:

 SQLgt; EXEC DBMS_STATS.gather_table_stats('SJERV', 'EVID');  PL/SQL procedure successfully completed.  

Теперь эти значения совпадают:

 SQLgt; SELECT num_rows  2 FROM user_tables  3 WHERE table_name = 'EVID';   NUM_ROWS ----------  808761  SQLgt;  

Это просто означает, что вы должны регулярно собирать статистику (схему) — например, ежедневно. Тогда у вас была бы довольно подробная информация о количестве строк. Но, чтобы быть уверенным, сколько строк у вас на самом деле, еще раз — select count(*) .