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

Panjang kolom pilihan Oracle

Tidak ada perbedaan dalam kinerja. Dan tidak ada pengoptimalan tersembunyi yang dilakukan karena kekuatan 2.

Satu-satunya hal yang membuat perbedaan dalam cara menyimpan sesuatu adalah sebenarnya data. 100 karakter disimpan dalam VARCHAR2(2000) kolom disimpan dengan cara yang persis sama dengan 100 karakter yang disimpan dalam VARCHAR2(500) kolom.

Pikirkan panjangnya sebagai kendala bisnis , bukan sebagai bagian dari tipe data. Satu-satunya hal yang harus mendorong keputusan Anda tentang panjangnya adalah kendala bisnis tentang data yang dimasukkan ke dalamnya.

Sunting :satu-satunya situasi di mana panjang tidak membuat perbedaan, adalah ketika Anda membutuhkan indeks pada kolom itu. Versi Oracle yang lebih lama (<10) memang memiliki batasan pada panjang kunci dan itu diperiksa saat membuat file index.

Meskipun mungkin di Oracle 11, itu mungkin bukan pilihan paling bijaksana untuk memiliki indeks pada nilai dengan 4000 karakter.

Edit 2 :

Jadi saya penasaran dan menyiapkan tes sederhana:

create table narrow (id varchar(40));
create table wide (id varchar(4000));

Kemudian isi kedua tabel dengan string yang terdiri dari 40 'X'. Jika memang ada perbedaan (substansial) antara penyimpanan, ini akan muncul entah bagaimana saat mengambil data, bukan?

Kedua tabel memiliki tepat 1048576 baris.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set autotrace traceonly statistics
SQL> select count(*) from wide;


Statistics
----------------------------------------------------------
          0  recursive calls
          1  db block gets
       6833  consistent gets
          0  physical reads
          0  redo size
        349  bytes sent via SQL*Net to client
        472  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select count(*) from narrow;


Statistics
----------------------------------------------------------
          0  recursive calls
          1  db block gets
       6833  consistent gets
          0  physical reads
          0  redo size
        349  bytes sent via SQL*Net to client
        472  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL>

Jadi pemindaian tabel lengkap untuk kedua tabel melakukan hal yang persis sama. Jadi apa yang terjadi ketika kita benar-benar memilih data?

SQL> select * from wide;

1048576 rows selected.


Statistics
----------------------------------------------------------
          4  recursive calls
          2  db block gets
      76497  consistent gets
          0  physical reads
          0  redo size
   54386472  bytes sent via SQL*Net to client
     769427  bytes received via SQL*Net from client
      69907  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
    1048576  rows processed

SQL> select * from narrow;

1048576 rows selected.


Statistics
----------------------------------------------------------
          4  recursive calls
          2  db block gets
      76485  consistent gets
          0  physical reads
          0  redo size
   54386472  bytes sent via SQL*Net to client
     769427  bytes received via SQL*Net from client
      69907  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
    1048576  rows processed

SQL>

Ada sedikit perbedaan dalam perolehan yang konsisten, tetapi itu bisa jadi karena caching.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengembalikan Jumlah Detik Lewat Tengah Malam di Oracle Database

  2. -bash:imp:perintah tidak ditemukan oracle

  3. Data tabel Oracle ke pernyataan INSERT dengan JAVA

  4. Kontrol sumber database dengan Oracle

  5. Oracle SQL - Kueri 2 tabel berdasarkan kunci asingnya