INDICATIVE ONLY - timings drift between runs and machines; nothing here is asserted.
Hibernate 7.4.13.Final, H2 in memory, JDK 25.0.5+8-LTS, 2 vCPU
150000 payments (50000 card, 50000 bank transfer, 50000 wallet), read through a StatelessSession, median of 15 runs after 5 warm-ups

strategy         query                                            rows  median ms
single-table     all payments (polymorphic)                     150000      247.2
single-table     one subclass (CardPayment)                      50000       82.4
single-table     count where amount > 500 (root col)                 1       18.4
single-table     first 50 by id (polymorphic)                       50        0.3

joined           all payments (polymorphic)                     150000      401.5
joined           one subclass (CardPayment)                      50000      107.1
joined           count where amount > 500 (root col)                 1       21.6
joined           first 50 by id (polymorphic)                       50        0.3

table-per-class  all payments (polymorphic)                     150000      422.0
table-per-class  one subclass (CardPayment)                      50000       82.1
table-per-class  count where amount > 500 (root col)                 1       56.0
table-per-class  first 50 by id (polymorphic)                       50      165.8

