APPROX_COUNT_DISTINCT : Quick Distinct Count in Oracle Database 12cR1 (12.1.0.2)
Use the APPROX_COUNT_DISTINCT to get quick counts of distinct values in 12.1.0.2 onward.
oracle 12cconfigurationintermediate
by OracleDba
12 views
Use the APPROX_COUNT_DISTINCT to get quick counts of distinct values in 12.1.0.2 onward.
1234567891011121314151617181920212223242526272829303132333435363738
SELECT COUNT(DISTINCT object_name) AS obj_count
FROM all_objects;
OBJ_COUNT
----------
47171
1 row selected.
SQL>
SELECT APPROX_COUNT_DISTINCT(object_name) AS obj_count
FROM all_objects;
OBJ_COUNT
----------
46788
1 row selected.
SQL>
SELECT tablespace_name, APPROX_COUNT_DISTINCT(table_name) AS tab_count
FROM all_tables
GROUP BY tablespace_name
ORDER BY tablespace_name;
TABLESPACE_NAME TAB_COUNT
------------------------------ ----------
SYSAUX 73
SYSTEM 36
USERS 7
44
4 rows selected.
SQL>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
SET TIMING ON
SELECT COUNT(DISTINCT object_name) AS obj_count
FROM all_objects;
OBJ_COUNT
----------
47171
1 row selected.
Elapsed: 00:00:02.39
SQL>
SELECT APPROX_COUNT_DISTINCT(object_name) AS obj_count
FROM all_objects;
OBJ_COUNT
----------
46788
1 row selected.
Elapsed: 00:00:02.00
SQL>
DROP TABLE t1 PURGE;
CREATE TABLE t1 AS
SELECT level AS data
FROM dual
CONNECT BY level <= 10000;
INSERT /*+ APPEND */ INTO t1
SELECT a.data FROM t1 a
CROSS JOIN t1 b;
COMMIT;
EXEC DBMS_STATS.gather_table_stats(USER,'T1');
SET TIMING ON
SELECT COUNT(DISTINCT data) AS data_count
FROM t1;
DATA_COUNT
----------
10000
1 row selected.
Elapsed: 00:00:19.66
SQL>
SELECT APPROX_COUNT_DISTINCT(data) AS data_count
FROM t1;
DATA_COUNT
----------
10050
1 row selected.
Elapsed: 00:00:10.46
SQL>Please to add comments
No comments yet. Be the first to comment!