Недостатков нет, используйте отметку времени (9), если это имеет смысл.
Отметка времени (9) и отметка времени (1) используют одинаковое количество места, и их производительность идентична.Я мог найти только один случай, когда была разница в производительности, и в этом случае метка времени (9) была на самом деле быстрее, чем метка времени (1).
(я избавлю вас от множества строк скучного кода, вставляемого встолбцы timestamp (1) и timestamp (9) и сравнение различных операций над ними.)
Это демонстрирует, что они используют одинаковый объем пространства (вставка многих значений и сравнение dba_segments):
--Create tables with timestamps and populate them with the same data (with different precision)
--Set initial and next to a low value so we can closely check the segment size)
create table timestamp1 (t1 timestamp(1), t2 timestamp(1), t3 timestamp(1), t4 timestamp(1), t5 timestamp(1))
storage(initial 65536 next 65536);
insert into timestamp1
select current_timestamp(1), current_timestamp(1), current_timestamp(1), current_timestamp(1), current_timestamp(1)
from dual connect by level <= 100000;
create table timestamp9 (t1 timestamp(9), t2 timestamp(9), t3 timestamp(9), t4 timestamp(9), t5 timestamp(9))
storage(initial 65536 next 65536);
insert into timestamp9
select current_timestamp(9), current_timestamp(9), current_timestamp(9), current_timestamp(9), current_timestamp(9)
from dual connect by level <= 100000;
--Segment size is identical
select segment_name, bytes from dba_segments where segment_name in ('TIMESTAMP1', 'TIMESTAMP9');
--SEGMENT_NAME BYTES
--TIMESTAMP1 8388608
--TIMESTAMP9 8388608
Это где timestamp (9) быстрее, когда используется current_timestamp, который вам, вероятно, понадобится в какой-то момент для генерации данных.Но мы говорим только о разнице между 0,175 и 0,25 секундами на моем медленном рабочем столе для генерации 100K временных меток.Я не уверен, почему метка времени (9) быстрее, может быть, метки времени всегда генерируются как метка времени (9), а затем округляются до другой точности?
--current_timestamp(9) is slightly faster than current_timestamp(1)
select count(*) from
(
select *
from dual
--where current_timestamp(9) = current_timestamp(9)
where current_timestamp(1) = current_timestamp(1)
connect by level <= 100000
);
РЕДАКТИРОВАТЬ: разница в производительности существует в 10g, но не 11g.