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. |