這學(xué)期的項(xiàng)目中,用hibernate和oracle。表結(jié)構(gòu)我們不能改,這樣的遺留系統(tǒng)用hibernate有點(diǎn)麻煩。汗!別人把可變長的字符類型設(shè)計(jì)為CHAR,郁悶死。這樣所有?形式的sql語句基本上無效(不是恰好這么長就找不到數(shù)據(jù)),這是oracle的JDBC限定了(mysql的JDBC不會)。然后就想到在=號左邊用TRIM可以解決PrepareStatement找不到數(shù)據(jù)的問題。
麻煩來了。同學(xué)用100W行數(shù)據(jù)來測試。發(fā)現(xiàn)比較卡。然后追蹤hibernate的SQL日志發(fā)現(xiàn)有trim的語句就慢。然后把此SQL語句在PL/SQL客戶端試下,發(fā)現(xiàn)在26秒才能找到結(jié)果。汗!這么嚴(yán)重!去了TRIM不到1秒的事情。
字段類型的設(shè)計(jì)不好,就這樣...
可以看下 oracle jdbc char 字段 PreparedStatement 查詢問題