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

Oracle 10g:estimering af MIN/MAX kolonneværdi

Ja, LOW_VALUE og HIGH_VALUE fortæller dig minimums- og maksimumværdierne i kolonnen men :

  • de er gemt som RAW(32)-kolonner, så betydningen vil ikke være umiddelbart tydelig
  • de vil være fra sidste gang, der blev indsamlet statistik for tabellen, så de er muligvis ikke nøjagtige (medmindre du eksplicit indsamler statistik, før du bruger dem)

Hvis du indekserer kolonnen, skal MIN(a) og MAX(a) være meget hurtige som i dette eksempel, hvor T1 har 50000 rækker og er indekseret 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 er det samme, hvis du vælger MAX i stedet for MIN. Men hvis du vælger MIN og MAX i en enkelt valgsætning, er resultatet anderledes:

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

Dette tyder på, at det kan være bedre at få dem separat, selvom jeg ikke endegyldigt har bevist det.



  1. Kan du sætte pladsholdere i udvalgt del af en forespørgsel ved hjælp af PDO?

  2. Node.js &MySQL - Fejl:1251 - Klienten understøtter ikke godkendelsesprotokol anmodet af serveren; overveje at opgradere MySQL-klienten

  3. SQL-forespørgsel til at tælle registrerede brugere pr. dag

  4. PHP / SQL, enkelt vælg hvor får værdien som kolonne