Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle 10g:оценка на MIN/MAX колона

Да, LOW_VALUE и HIGH_VALUE ще ви кажат минималните и максималните стойности в колоната но :

  • те се съхраняват като RAW(32) колони, така че значението няма да бъде веднага очевидно
  • те ще бъдат от последния път, когато са събрани статистически данни за таблицата, така че може да не са точни (освен ако изрично не съберете статистически данни, преди да ги използвате)

Ако индексирате колоната, тогава MIN(a) и MAX(a) трябва да са много бързи, както в този пример, където T1 има 50 000 реда и е индексиран на 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

Резултатът е същият, ако изберете MAX вместо MIN. Въпреки това, ако изберете MIN и MAX в един оператор за избор, резултатът е различен:

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

Това предполага, че може би е по-добре да ги вземете отделно, въпреки че не съм доказал убедително това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е минималната настройка, необходима за разгръщане на .NET приложение с Oracle клиент 11?

  2. Защо тази проверка за нулев асоциативен масив в PL/SQL е неуспешна?

  3. 40 въпрос, който трябва да знаете за R12.2

  4. Присъединяване към колони с разделени низове в Oracle

  5. PL/SQL на SquirreL SQL клиент 3.7.1