sql >> Databasteknik >  >> RDS >> Oracle

Oracle 10g:MIN/MAX kolumnvärdesuppskattning

Ja, LOW_VALUE och HIGH_VALUE talar om för dig lägsta och högsta värden i kolumnen men :

  • de lagras som RAW(32)-kolumner, så innebörden blir inte direkt uppenbar
  • de kommer att vara från och med senaste gången statistik samlades in för tabellen, så de kanske inte är korrekta (såvida du inte uttryckligen samlar in statistik innan du använder dem)

Om du indexerar kolumnen bör MIN(a) och MAX(a) vara mycket snabba som i det här exemplet där T1 har 50 000 rader och indexeras på 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

Resultatet är detsamma om du väljer MAX istället för MIN. Men om du väljer MIN och MAX i en enda select-sats blir resultatet annorlunda:

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

Detta tyder på att det kan vara bättre att få dem separat, även om jag inte har bevisat det.



  1. mysqldump gör en partiell backup - ofullständig tabelldump

  2. Kan kardinalitet skilja sig åt för dubbletter av index i mysql?

  3. När en ny rad i databasen läggs till måste ett externt kommandoradsprogram anropas

  4. PG::InvalidParameterValue:FEL:ogiltigt värde för parametern client_min_messages:panic