«В соответствии с планом выполнения предпочтительным является CONNECT BY».
Это неудивительно. Синтаксис CONNECT BY был частью инструментария Oracle на протяжении десятилетий, поэтому у Oracle было много времени, чтобы оптимизировать оптимизатор, чтобы обрабатывать его в совершенстве. Рекурсивные КТЭ новее.
Также я подозреваю, что CBO будет сложнее понять стоимость рекурсивного CTE, поскольку они являются программными, а не управляемыми данными.
С другой стороны, многие люди (а не только новички) сталкиваются с проблемами, связанными с иерархическим синтаксисом Oracle, тогда как рекурсия является стандартной концепцией программирования. Так что, возможно, это то, где они полезны.
Кстати, я не думаю, что иерархические запросы должны использоваться в ситуациях, когда производительность имеет решающее значение. Если у вас есть большой объем данных, которые нужно быстро и часто получать в иерархическом формате, вам следует, вероятно, рассмотреть другой подход, например, материализацию транзитивных замыканий. Find out more.
Рекурсивный CTE предлагает немного больше контроля над фактической рекурсией (сначала глубина, сначала ширина), но кроме этого я не вижу причины предпочитать ее над 'connect by'. –