You don't give the full pool C3P0 configuration, which I would like to see, but if that is the
core of the configuration, I can tell you what the primary difference is...
In addition to striving for speed, HikariCP also tries to ensure the highest reliability. As such
HikariCP tests connections immediately before returning them to the user. In order to match
that same reliability level with C3P0, and for the comparison to therefore be fair, you need to
The way your pool is configured, C3P0 will test idle connections every 10 minutes. What
happens if you reboot your database backend? If your connection pool has 30 connections,
then 30 broken connections will be given to your application. I don't know of many applications
that handle that well in production, but use cases vary.
Additionally, you are using the C3P0 prepared statement cache (maxStatements=50). HikariCP
does not include a prepared statement cache, instead relying on the driver's provided cache, if
configured. The MySQL JDBC driver has such a cache, but you must configure it like so:
<prop key="hibernate.hikari.dataSource.prepStmtCacheSize">50</prop>
If your statements are longer than 256 characters, you also need to set prepStmtCacheSqlLimit.
Lastly, I would be interested in your test results if you run from the 'dev' branch of Hikari (1.2.7-SNAPSHOT),
we're going to be releasing it this week, with some improvements based on feedback such as this.