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

Oracle предпочитани дължини на колони

Няма разлика в производителността. И няма скрити оптимизации, направени поради силата на 2.

Единственото нещо, което прави разлика в това как се съхраняват нещата, е реалното данни. 100 знака, съхранени в VARCHAR2(2000) колона се съхраняват точно по същия начин като 100 знака, съхранени в VARCHAR2(500) колона.

Мислете за дължината като за бизнес ограничение , а не като част от типа данни. Единственото нещо, което трябва да ръководи решението ви относно дължината, са бизнес ограниченията относно данните, които се поставят там.

Редактиране :единствената ситуация, в която дължината прави направи разлика, е когато имате нужда от индекс на тази колона. По-старите версии на Oracle (<10) имаха ограничение за дължината на ключа и това беше проверено при създаването на индекса.

Въпреки че е възможно в Oracle 11, може да не е най-мъдрият избор да имате индекс на стойност с 4000 знака.

Редактиране 2 :

Така че бях любопитен и настроих прост тест:

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

След това попълни и двете таблици с низове, съставени от 40 'X'. Ако наистина е имало (съществена) разлика между хранилището, това трябва да се покаже по някакъв начин при извличане на данните, нали?

И двете таблици имат точно 1048576 реда.

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>

Така че пълното сканиране на таблици и за двете таблици направи точно същото. И така, какво се случва, когато всъщност изберем данните?

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>

Има малка разлика в последователните получавания, но това може да се дължи на кеширане.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете първия ден от седмицата от номера на седмицата

  2. Разбивка на Oracle Cloud – Разходи за хостинг на база данни на OCI

  3. Свързване с Oracle 12c база данни от Pentaho Data Integration (Kettle) Community Edition

  4. как да зацикля приемането на потребителски вход с pl/sql?

  5. Търсят се NULL стойности за различен тип Oracle