sql >> Base de Datos >  >> RDS >> Oracle

Recuento de filas de Oracle de la tabla por conteo (*) frente a NUM_ROWS de DBA_TABLES

De acuerdo con la documentación, NUM_ROWS es el "Número de filas en la tabla" , así que puedo ver cómo esto puede ser confuso. Sin embargo, existe una gran diferencia entre estos dos métodos.

Esta consulta selecciona el número de filas en MY_TABLE desde una vista del sistema. Estos son datos que Oracle ha recopilado y almacenado previamente.

select num_rows from all_tables where table_name = 'MY_TABLE'

Esta consulta cuenta el número actual de filas en MI_TABLA

select count(*) from my_table

Por definición, son piezas de diferencia de datos. Hay dos datos adicionales que necesita sobre NUM_ROWS.

  1. En la documentación hay un asterisco junto al nombre de la columna, que lleva a esta nota:

    Las columnas marcadas con un asterisco (*) se completan solo si recopila estadísticas en la tabla con la instrucción ANALYZE o el paquete DBMS_STATS.

    Esto significa que, a menos que haya recopilado estadísticas en la tabla, esta columna no tendrá ningún dato.

  2. Estadísticas recopiladas en 11g+ con el estimate_percent predeterminado , o con una estimación del 100 %, devolverá un número exacto para ese momento. Pero las estadísticas recopiladas antes de 11g, o con un estimate_percent personalizado menos del 100%, usa muestreo dinámico y puede ser incorrecto. Si reúne el 99,999 %, es posible que se pierda una sola fila, lo que a su vez significa que la respuesta que obtiene es incorrecta.

Si tu mesa es nunca actualizado, entonces ciertamente es posible usar ALL_TABLES.NUM_ROWS para averiguar el número de filas en una tabla. Sin embargo , y es un gran sin embargo, si algún proceso inserta o elimina filas de su tabla, en el mejor de los casos será una buena aproximación y, dependiendo de si su base de datos recopila estadísticas automáticamente, podría ser terriblemente incorrecto.

En términos generales, siempre es mejor contar el número de filas en la tabla en lugar de confiar en las tablas del sistema.