Why Plans Change

Cause Description
Stats changed Table, index, or column stats were refreshed. Cardinality estimates changed.
Bind peeking The first bind value caused a plan that’s bad for later values.
No histograms Optimizer assumes uniform data when actual data is skewed.
New index or object The optimizer sees a new access path and tries it.
Adaptive optimization Oracle switched plans mid-execution based on early row counts.
SQL text changed slightly Even whitespace differences result in new SQL_IDs and plans.
Cursor aged out The plan aged out of the shared pool and was regenerated.