Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle 10g:szacowanie wartości kolumny MIN/MAX

Tak, LOW_VALUE i HIGH_VALUE podają minimalne i maksymalne wartości w kolumnie ale :

  • są one przechowywane jako kolumny RAW(32), więc ich znaczenie nie będzie od razu widoczne
  • będą one aktualne na dzień ostatniego zebrania statystyk dla tabeli, więc mogą nie być dokładne (chyba że wyraźnie zbierzesz statystyki przed ich użyciem)

Jeśli indeksujesz kolumnę, MIN(a) i MAX(a) powinny być bardzo szybkie, jak w tym przykładzie, w którym T1 ma 50000 wierszy i jest indeksowany na 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

Wynik jest taki sam, jeśli wybierzesz MAX zamiast MIN. Jeśli jednak wybierzesz MIN i MAX w jednej instrukcji select, wynik będzie inny:

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

Sugeruje to, że lepiej byłoby je kupić osobno, chociaż nie udowodniłem tego jednoznacznie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy odwołania cykliczne są dopuszczalne w bazie danych?

  2. Tabela mutuje, wyzwalacz/funkcja może jej nie widzieć (powstrzymując średnią ocenę przed spadkiem poniżej 2,5)

  3. Dołączanie trwa zbyt długo

  4. skonfigurować django z problemem bazy danych Oracle 11g

  5. cx_Oracle:Jak iterować zestaw wyników?