数据库char字段做trim之后查询很慢的解决方式
select * from TABLE0 where trim(column1)=:param
当表数据量大时,即使给column1字段加上索引,这条查询语句也会很慢。
因为使用trim函数后,column1的索引会失效,有两种处理方法:
1.给表加上trim(column1)函数索引
这样就能走索引查询,不用全表扫描
2.代码里面对param补齐末尾的空格
使用tirm无非是担心char字段存储的长度没达到数据库设置的长度,数据末尾会出现空格,而前端展示数据时一般会去掉空格传给后端,这就导致无法查询出数据,char是用来存储定长字符的,虽然出现这种问题,是设计和使用上的不合理导致,但是还得解决这个问题。
可以在程序中对传入参数的末尾补齐空格,直到达到char字段的长度,这样查询就不需要tirm了,java代码如下:
private String formatChar(String s, int charLen){int len = s == null ? 0 : s.length();if(len > 0 && len < charLen){StringBuilder blank = new StringBuilder();for (int i = 0, j= charLen - len; i < j; i++) {blank.append(" ");}s = s + blank;}return s;}