今天遇到一个非常怪异的问题,一个HQL通过hibernate执行大概需要400秒左右,但把这个HQL生成的SQL直接到数据库中执行,却只要0.05秒,差距非常大,试了N种方法不能解决,最后发现表中有个字段映射是“Number--Varchar”,java中是Long,数据库中是Varchar,HQL中查询条件写的是 id=?,参数是用的Long类型,如果直接改为String类型,执行速度就能达到1-2秒,问题解决
导致问题的原因:表内数据过多,表中给该字段建了索引,但是如果是Number类型,则Hibernate执行sql时不会使用索引。