Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle 10g:MIN/MAX-Spaltenwertschätzung

Ja, LOW_VALUE und HIGH_VALUE zeigen Ihnen die minimalen und maximalen Werte in der Spalte aber :

  • sie werden als RAW(32)-Spalten gespeichert, daher ist die Bedeutung nicht sofort ersichtlich
  • Sie beziehen sich auf den Stand der letzten Statistikerfassung für die Tabelle und sind daher möglicherweise nicht genau (es sei denn, Sie erfassen explizit Statistiken, bevor Sie sie verwenden)

Wenn Sie die Spalte indizieren, sollten MIN(a) und MAX(a) sehr schnell sein, wie in diesem Beispiel, wo T1 50000 Zeilen hat und auf OBJECT_ID:

indiziert ist
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

Das Ergebnis ist das gleiche, wenn Sie MAX statt MIN wählen. Wenn Sie jedoch MIN und MAX in einer einzigen Auswahlanweisung auswählen, ist das Ergebnis anders:

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

Dies deutet darauf hin, dass es besser sein könnte, sie separat zu erwerben, obwohl ich das nicht endgültig bewiesen habe.