Una cosa que encontré tarde en un proyecto es que los tipos de fecha de MySQL no pueden almacenar milisegundos. ¡Datetimes y timestamps solo se resuelven en segundos! No puedo recordar las circunstancias exactas en que esto ocurrió pero terminé necesitando almacenar un int que podría convertirse en una fecha (con milisegundos) en mi código.
Los controladores JDBC de MySQL almacenan en caché los resultados de forma predeterminada, hasta el punto de que hará que el programa se quede sin memoria (arroje excepciones de OutOfMemory). Puede apagarlo, pero hay que hacerlo al pasar algunos parámetros inusuales en la declaración al crearlo:
Statement sx = c.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,java.sql.ResultSet.CONCUR_READ_ONLY);
sx.setFetchSize(Integer.MIN_VALUE);
Si lo hace, el controlador JDBC voluntad no resultados de caché en la memoria, y se puede hacer grandes consultas PERO ¿Qué sucede si está utilizando un sistema ORM? No crea los enunciados usted mismo y, por lo tanto, no puede cambiar el almacenamiento en caché. Lo que básicamente significa que estás completamente jodido si tu sistema ORM está tratando de hacer algo que involucre una gran cantidad de registros.
Si tuvieran algún sentido, lo harían configurable mediante la URL JDBC. Oh bien.
La palabra en cursiva "real" va a dejar esta pregunta cerrada como subjetiva y argumentativa, todo por sí mismo. – chaos
bien, cambiado * real * a código cerrado –
Sugiero eliminar esa frase por completo. "años de uso de productos de bases de datos como ..." –