| 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-file | 312 | 0.085864s | 0.011671s | 0.004776s | 0.057991s | 0.010071s |
| Doctrine 3.6.2 |
sqlite-file | 312 | 0.101433s | 0.021777s | 0.016859s | 0.017637s | 0.001383s |
| PHPFUIBatch 3.0.3 |
sqlite-file | 312 | 0.101979s | 0.008220s | 0.005851s | 0.082785s | 0.002716s |
| Cycle 2.16.0 |
sqlite-file | 312 | 0.115485s | 0.014167s | 0.004841s | 0.069482s | 0.012711s |
| ActiveRecord 2.0.6 |
sqlite-file | 312 | 0.119332s | 0.022642s | 0.012249s | 0.080010s | 0.002031s |
| PHPFUI 3.0.3 |
sqlite-file | 312 | 0.123102s | 0.017820s | 0.006531s | 0.081945s | 0.014424s |
| Propel2 6cb272b6 |
sqlite-file | 312 | 0.140120s | 0.021820s | 0.012038s | 0.084219s | 0.014929s |
| CakeCached 5.3.3 |
sqlite-file | 312 | 0.146605s | 0.048116s | 0.019845s | 0.060316s | 0.005323s |
| Cake 5.3.3 |
sqlite-file | 312 | 0.147610s | 0.049271s | 0.020203s | 0.060169s | 0.004634s |
| Yii 2.0.54 |
sqlite-file | 312 | 0.151413s | 0.024662s | 0.018280s | 0.085530s | 0.012982s |
| RedBean 5.7.5 |
sqlite-file | 312 | 0.159945s | 0.022608s | 0.006873s | 0.097580s | 0.015457s |
| DivergenceV3 3.2.0 |
sqlite-file | 312 | 0.161307s | 0.025543s | 0.015308s | 0.104333s | 0.013905s |
| Eloquent 13.2.0 |
sqlite-file | 312 | 0.297289s | 0.052451s | 0.023884s | 0.162876s | 0.018188s |