[TL;DR] Използвайте дати за съхраняване на дати, числа за съхраняване на числа и низове за съхраняване на низове.
Oracle съхранява NUMBER тип данни като 1 байт на 2 цифри.
Oracle съхранява CHAR тип данни като 1 байт на ASCII знак (UTF-8 и други кодировки може да отнемат повече за знаци в разширени набори) и ще допълни низа отдясно със знаци за интервал, така че всички низове да са с еднаква дължина.
Oracle съхранява VARCHAR2 тип данни като 1 байт на ASCII знак плюс малка надбавка (1 или 2 байта) за дължината на низа.
Oracle съхранява DATE тип данни като 7 байта
(2 за година и 1 за всеки месец, ден, час, минута, секунда).
Въз основа на ваш предишен въпрос
изглежда, че съхранявате year и quarter и ако приемем, че винаги ще имате 4-цифрени години и 1-цифрени тримесечия, тогава:
NUMBER(5,0)ще отнеме 3 байта;CHAR(5 CHARACTER)ще отнеме 5 байта;VARCHAR2(5 CHARACTER)ще отнеме 6 байта; иDATEще отнеме 7 байта.
Така че само паметта се разглежда като NUMBER(5,0) би било най-ефективно.
Въпреки това
Веднага след като започнете да правите аритметика на година/тримесечия, съхранени като числа/низове, тогава ще изпаднете в проблеми с производителността:
Например получаване на следващото тримесечие:
- Ако
quarterеNUMBERтип данни, тогава можете да използвате:CASE WHEN MOD(quarter,10) = 4 THEN quarter + 7 ELSE quarter + 1 ENDно това не работи, когато искате да добавите 5 четвърти или да започнете да изваждате четвърти и тогава логиката започва да става много по-сложна. - Ако
quarterеCHARтип данни, тогава бихте могли да ги конвертирате в число или дата и да използвате някой от тези методи (манипулирането на низове вероятно няма да бъде ефективно). - Ако
quarterеDATEтогава просто трябва да използватеADD_MONTHS( quarter, 3 ).
DATE методът е самодокументиращ се и вече съществува, докато NUMBER просто ще се превърне в персонализирана функция за вашето приближение на QUARTER тип данни и след като приложите всички функции за сравнение и манипулиране, от които се нуждаете, ефективно ще пренапишете DATE тип данни като UDT за тримесечия и тези функции ще бъдат по-малко ефективни от оптимизираните функции за дата.
Не използвайте неподходящи типове данни - просто съхранявайте датите като дати; числата като числа; и низове като низ.