wwwlz-grand,
wwwlz-grand |
---|
Подскажите, пожалуйста, чем отличается count(*) от count(1) и в каких случаях? Если вообще, чем-то отличаются. |
На эту тему вспоминается баг, который в последние недели регулярно в рассылке MOS Hot Topics приходит, т.к. я его в favorites добавил:
Bug 19450314 : UNNECESSRAY INVALIDATIONS IN 12CДемонстрация в 12.1.0.2.10 (DBBP for Engineering Systems and DBIM):
+ |
SQL> create table t(x int);
SQL>
SQL> create or replace view vw_count_star
2 as
3 select count(*) cnt
4 from t
5 /
SQL> create or replace view vw_count_1
2 as
3 select count(1) cnt
4 from t
5 /
SQL>
SQL> select object_name, status
2 from obj
3 where object_name in ('VW_COUNT_STAR', 'VW_COUNT_1')
4 order by 1;
OBJECT_NAME STATUS
-------------------- ---------------------
VW_COUNT_1 VALID
VW_COUNT_STAR VALID
SQL>
SQL> exec dbms_stats.gather_table_stats( '', 't', method_opt=> 'for columns (mod(x,2)) size auto')
SQL>
SQL> select object_name, status
2 from obj
3 where object_name in ('VW_COUNT_STAR', 'VW_COUNT_1')
4 order by 1;
OBJECT_NAME STATUS
-------------------- ---------------------
VW_COUNT_1 INVALID
VW_COUNT_STAR VALID
|
Еще нужно учесть, что с 12c extended statistics генерируется автоматом. Т.е. невалидные объекты в БД могут возникнуть "внезапно" после очередного сбора статистики.
Другие побочные эффекты этой новой возможности отметил Dom Brooks в блоге Martin Bach неделю назад:
Little things worth knowing: automatic generation of extended statistics in 12c