| Family | Pressure | Why It Changes Speed | Avg Runtime |
|---|---|---|---|
| simple | baseline row shape | Shows framework overhead with minimal field complexity, so object creation and query setup dominate. | 0.099689s |
| canary | mixed field and nullable stress | Wide mixed records amplify casting, hydration, dirty tracking, and adapter metadata overhead. | 0.154049s |
| int_fixed | pure scalar writes | A low-noise floor. Slow results here usually mean framework machinery is expensive even before text and cast-heavy payloads show up. | 0.123969s |
| float_fixed | numeric conversion paths | Decimal and float normalization can widen update and verification cost, especially for ORMs that compare serialized values. | 0.141195s |
| string_fixed | predictable text hydration | Column count and text assignment matter more than payload variability, which makes hydration strategy easier to isolate. | 0.118621s |
| string_variable | application-like text workload | Variable strings and note fields make this the closest to real CRUD traffic and usually punish heavier active-record layers the most. | 0.122112s |
| Operation Shape | Why Models Move |
|---|---|
| Warmup vs hot runs | Run 1 is warmup. Hot-path averages exclude it so boot and metadata setup do not dominate steady-state rankings. |
| Insert and indexed schemas | Indexed tables make writes cost more because every insert and many updates must maintain secondary indexes as well as the row itself. |
| Read all vs read probes | Read All rewards bulk hydration efficiency; random and tail probes expose per-query setup, lookup overhead, and tiny-result inefficiency. |
| Update with verification | Each update shape is followed by a verification read, so dirty-checking, write SQL generation, hydration, and comparison all affect the final time. |
| Delete with confirmation | Deletes are checked afterward. Frameworks that pay extra for follow-up lookups or teardown lose more time here than a bare SQL path. |
| Total runtime | The total runtime metric is effectively a benchmark of the machine plus adapter behavior across the full workload, not just one CRUD verb. |
| Framework | Storage | Samples | Total | Insert | Read | Update | Delete |
|---|---|---|---|---|---|---|---|
| Atlas 2.0.1 |
sqlite-memory | 312 | 0.011893s | 0.001171s | 0.003418s | 0.005670s | 0.000233s |
| PHPFUI 3.0.3 |
sqlite-memory | 312 | 0.022028s | 0.004223s | 0.005351s | 0.009640s | 0.000647s |
| Cycle 2.16.0 |
sqlite-memory | 312 | 0.023986s | 0.001013s | 0.003033s | 0.004255s | 0.000164s |
| PHPFUIBatch 3.0.3 |
sqlite-memory | 312 | 0.024710s | 0.006161s | 0.005034s | 0.010017s | 0.001341s |
| Propel2 6cb272b6 |
sqlite-memory | 312 | 0.045488s | 0.007338s | 0.011485s | 0.018221s | 0.001821s |
| ActiveRecord 2.0.6 |
sqlite-memory | 312 | 0.046491s | 0.010528s | 0.009809s | 0.023104s | 0.000833s |
| RedBean 5.7.5 |
sqlite-memory | 312 | 0.054854s | 0.007080s | 0.005679s | 0.022766s | 0.001531s |
| DivergenceV3 3.2.0 |
sqlite-memory | 312 | 0.058695s | 0.011085s | 0.013932s | 0.030209s | 0.001224s |
| Yii 2.0.54 |
sqlite-memory | 312 | 0.061358s | 0.010707s | 0.016202s | 0.022471s | 0.002323s |
| Doctrine 3.6.2 |
sqlite-memory | 312 | 0.104974s | 0.022564s | 0.017059s | 0.018556s | 0.001576s |
| CakeCached 5.3.3 |
sqlite-memory | 312 | 0.127842s | 0.045371s | 0.017826s | 0.048530s | 0.003297s |
| Cake 5.3.3 |
sqlite-memory | 312 | 0.133757s | 0.048734s | 0.019003s | 0.049274s | 0.003308s |
| Eloquent 13.2.0 |
sqlite-memory | 312 | 0.191504s | 0.037605s | 0.022422s | 0.088599s | 0.004846s |