[TL;DR] Gunakan tanggal untuk menyimpan tanggal, angka untuk menyimpan angka, dan string untuk menyimpan string.
Oracle menyimpan NUMBER
tipe data sebagai 1 byte per 2 digit.
Oracle menyimpan CHAR
tipe data sebagai 1 byte per karakter ASCII (UTF-8 dan penyandian lainnya mungkin memerlukan lebih banyak untuk karakter dalam kumpulan yang diperluas) dan akan melapisi string dengan karakter spasi sehingga semua string memiliki panjang yang persis sama.
Oracle menyimpan VARCHAR2
tipe data sebagai 1 byte per karakter ASCII ditambah overhead kecil (1 atau 2 byte) untuk panjang string.
Oracle menyimpan DATE
tipe data sebagai 7 byte
(2 untuk tahun dan 1 untuk setiap bulan, hari, jam, menit, detik).
Berdasarkan pertanyaan Anda sebelumnya
Anda tampaknya menyimpan year
dan quarter
dan dengan asumsi bahwa Anda akan selalu memiliki 4 digit tahun dan 1 digit kuartal maka:
NUMBER(5,0)
akan memakan waktu 3 byte;CHAR(5 CHARACTER)
akan memakan waktu 5 byte;VARCHAR2(5 CHARACTER)
akan memakan waktu 6 byte; danDATE
akan memakan waktu 7 byte.
Jadi hanya mempertimbangkan memori sebagai NUMBER(5,0)
akan menjadi yang paling efisien.
Namun
Segera setelah Anda mulai melakukan aritmatika pada tahun/kuartal yang disimpan sebagai angka/string, Anda akan mengalami masalah kinerja:
Misalnya, mendapatkan kuartal berikutnya :
- Jika
quarter
adalahNUMBER
tipe data maka Anda dapat menggunakan:CASE WHEN MOD(quarter,10) = 4 THEN quarter + 7 ELSE quarter + 1 END
tetapi ini tidak menangani saat Anda ingin menambahkan 5 perempat atau mulai mengurangi seperempat dan kemudian logikanya mulai menjadi jauh lebih rumit. - Jika
quarter
adalahCHAR
tipe data maka Anda dapat mengonversinya menjadi angka atau tanggal dan menggunakan salah satu metode tersebut (manipulasi string tidak mungkin berhasil). - Jika
quarter
adalahDATE
maka Anda hanya perlu menggunakanADD_MONTHS( quarter, 3 )
.
Tanggal DATE
metode didokumentasikan sendiri dan sudah ada sedangkan NUMBER
metode hanya akan menjadi fungsi khusus untuk perkiraan Anda dari QUARTER
tipe data dan setelah Anda menerapkan semua fungsi perbandingan dan manipulasi yang Anda butuhkan, Anda akan secara efektif menulis ulang DATE
tipe data sebagai UDT untuk kuartal dan fungsi-fungsi tersebut akan memiliki kinerja yang lebih rendah daripada fungsi tanggal yang dioptimalkan.
Jangan gunakan tipe data yang tidak sesuai - simpan saja tanggal sebagai tanggal; angka sebagai angka; dan string sebagai string.