Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle 10g:estimasi nilai kolom MIN/MAX

Ya, LOW_VALUE dan HIGH_VALUE akan memberi tahu Anda nilai minimum dan maksimum di kolom tetapi :

  • disimpan sebagai kolom RAW(32), jadi artinya tidak langsung terlihat
  • itu akan menjadi statistik terakhir kali dikumpulkan untuk tabel, jadi mungkin tidak akurat (kecuali jika Anda secara eksplisit mengumpulkan statistik sebelum menggunakannya)

Jika Anda mengindeks kolom maka MIN(a) dan MAX(a) harus sangat cepat seperti dalam contoh ini di mana T1 memiliki 50000 baris dan diindeks pada 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

Hasilnya sama jika Anda memilih MAX bukan MIN. Namun, jika Anda memilih MIN dan MAX dalam satu pernyataan pilih, hasilnya berbeda:

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

Ini menunjukkan bahwa mungkin lebih baik untuk mendapatkannya secara terpisah, meskipun saya belum membuktikannya secara meyakinkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NULLIF() Fungsi di Oracle

  2. Memberikan Hak Istimewa Buat Direktori di Oracle

  3. Bagaimana cara menghitung jumlah nilai yang tidak berurutan dalam kolom menggunakan SQL?

  4. Oracle 11g - Temukan Catatan dalam CLOB dengan Umpan Jalur Pengembalian Kereta

  5. Teks Oracle keluar dengan kurung kurawal dan wildcard