Это почти наверняка не будет заметной разницы.
Индекс может быть немного более компактным, поскольку целочисленные представления могут быть немного меньше, чем представление с фиксированной точкой. Например, для номера 1234 требуется 3 байта памяти, а для номера 1.234 требуется 4 байта памяти. Иногда обратное будет истинным, а значение фиксированной точки потребует меньше памяти, но в 100 раз более вероятно, что целочисленное представление будет меньше, чем наоборот. Вы можете видеть, что сами по заполнению таблицы с первыми 1 миллиона целых и первый миллион целых чисел, разделенных на 1000.
SQL> create table int_test(int_col number(38,0), fixed_col number(10,3));
Table created.
SQL> insert into int_test
2 select level, level/1000
3 from dual
4 connect by level <= 1000000;
1000000 rows created.
SQL> select sum(vsize(int_col)) int_col_total_size,
2 sum(vsize(fixed_col)) fixed_col_total_size
3 from int_test;
INT_COL_TOTAL_SIZE FIXED_COL_TOTAL_SIZE
------------------ --------------------
3979802 4797983
SQL> ed
Wrote file afiedt.buf
1 select count(*) int_larger_than_fixed
2 from int_test
3* where vsize(int_col) > vsize(fixed_col)
SQL>/
INT_LARGER_THAN_FIXED
---------------------
8262
SQL> ed
Wrote file afiedt.buf
1 select count(*) fixed_larger_than_int
2 from int_test
3* where vsize(int_col) < vsize(fixed_col)
SQL>/
FIXED_LARGER_THAN_INT
---------------------
826443
В то время как индекс будет slighly более компактным, что придет только в игру, если вам «Выполняйте несколько расширенных сканирований по диапазону или быстрое полное сканирование структуры индекса. Очень маловероятно, что в индексе будет меньше уровней для целочисленных значений, поэтому для однострочного поиска потребуется столько же ввода-вывода. И довольно редко вам нужно делать масштабные сканирование диапазона по индексу. Тот факт, что данные являются более компактными, также может привести к усилению конкуренции на определенных блоках.
Мое предположение, следовательно, состоит в том, что индекс будет использовать немного меньше места на диске, но вам будет трудно заметить разницу в производительности. И если вы делаете дополнительные умножения и деления каждый раз, дополнительный процессор, который будет потреблять, скорее всего, отменит все преимущества маржинального ввода-вывода, которые вы можете получить. Если в вашем приложении происходит гораздо более быстрое сканирование индекса, чем в среднем, вы можете увидеть некоторые сокращенные операции ввода-вывода.