Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle 10g:stima del valore della colonna MIN/MAX

Sì, LOW_VALUE e HIGH_VALUE ti indicheranno i valori minimo e massimo nella colonna ma :

  • sono memorizzati come colonne RAW(32), quindi il significato non sarà immediatamente evidente
  • Saranno all'ultima volta che le statistiche sono state raccolte per la tabella, quindi potrebbero non essere accurate (a meno che tu non raccolga esplicitamente le statistiche prima di usarle)

Se indicizzi la colonna, MIN(a) e MAX(a) dovrebbero essere molto veloci come in questo esempio dove T1 ha 50000 righe ed è indicizzato su OBJECT_ID:

SQL> select min(object_id) from t1;

MIN(OBJECT_ID)
--------------
           100

------------------------------------------------------------------------------------
| Id  | Operation                  | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |       |     1 |     5 |     2   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE            |       |     1 |     5 |            |          |
|   2 |   INDEX FULL SCAN (MIN/MAX)| T1_ID | 53191 |   259K|     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------

Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        419  bytes sent via SQL*Net to client
        380  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

Il risultato è lo stesso se si seleziona MAX invece di MIN. Tuttavia, se selezioni MIN e MAX in una singola istruzione select, il risultato è diverso:

SQL> select min(object_id), max(object_id) from t1;

MIN(OBJECT_ID) MAX(OBJECT_ID)
-------------- --------------
           100          72809


-------------------------------------------------------------------------------
| Id  | Operation             | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |     1 |     5 |    34   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE       |       |     1 |     5 |            |          |
|   2 |   INDEX FAST FULL SCAN| T1_ID | 53191 |   259K|    34   (0)| 00:00:01 |
-------------------------------------------------------------------------------


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        125  consistent gets
          0  physical reads
          0  redo size
        486  bytes sent via SQL*Net to client
        380  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

Ciò suggerisce che potrebbe essere meglio acquistarli separatamente, anche se non l'ho dimostrato in modo definitivo.