Производительность COUNT (*) на основе индекса или таблицы действительно зависит от размера сегмента. Вы можете иметь таблицу объемом 1 ГБ, в которой есть только одна строка, но Oracle все равно может сканировать все выделенное пространство. Вставка еще одного миллиона строк может вообще не повлиять на производительность, если она не изменит отметку верхнего уровня. Индексы работают аналогичным образом, когда разные шаблоны удаления могут оставлять разные объемы свободного пространства в структуре индекса и приводить к тому, что сканирование индекса дает лучшую или худшую производительность, чем O (N).
Итак, теоретически это O (N). На практике существуют проблемы с реализацией, которые могут привести к тому, что он будет совсем другим.
Например, в некоторых случаях хранилище данных Oracle может работать быстрее, чем O (N). В частности, оптимизатор может сканировать индекс растрового изображения, а размер индекса растрового изображения слабо связан с размером таблицы, в отличие от индекса b-дерева. Это происходит из-за методологии сжатия, которая делает размер индекса зависимым от размера таблицы, количества уникальных значений, распределения значений по всей таблице, а также, как я полагаю, исторической схемы загрузки. Таким образом, удвоение количества строк в таблице может только увеличить размер индекса на 10%.
При наличии материализованного представления вы также можете получить O (1), читая сводную таблицу (триггер - это небезопасный способ сделать это).