数据库char字段做trim之后查询很慢的解决方式

sql 复制代码
select * from TABLE0 where trim(column1)=:param

当表数据量大时,即使给column1字段加上索引,这条查询语句也会很慢。

因为使用trim函数后,column1的索引会失效,有两种处理方法:

1.给表加上trim(column1)函数索引

这样就能走索引查询,不用全表扫描

2.代码里面对param补齐末尾的空格

使用tirm无非是担心char字段存储的长度没达到数据库设置的长度,数据末尾会出现空格,而前端展示数据时一般会去掉空格传给后端,这就导致无法查询出数据,char是用来存储定长字符的,虽然出现这种问题,是设计和使用上的不合理导致,但是还得解决这个问题。

可以在程序中对传入参数的末尾补齐空格,直到达到char字段的长度,这样查询就不需要tirm了,java代码如下:

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;
    }
相关推荐
Jasonakeke9 分钟前
【重学MySQL】八十八、8.0版本核心新特性全解析
android·数据库·mysql
comeoffbest19 分钟前
PostgreSQL 能存万物:从安装到高级功能实战
数据库·postgresql
时序数据说40 分钟前
IoTDB如何解决海量数据存储难题?
大数据·数据库·物联网·时序数据库·iotdb
小楓12012 小时前
MySQL數據庫開發教學(二) 核心概念、重要指令
开发语言·数据库·mysql
花果山总钻风2 小时前
MySQL奔溃,InnoDB文件损坏修复记录
数据库·mysql·adb
TDengine (老段)3 小时前
TDengine IDMP 运维指南(管理策略)
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
Full Stack Developme4 小时前
PostgreSQL interval 转换为 int4 (整数)
数据库·postgresql
larance4 小时前
FastAPI + SQLAlchemy 数据库对象转字典
数据库·fastapi
哆啦A梦是一只狸猫4 小时前
SQL Server缩小日志文件.ldf的方法(适用于开发环境)
数据库·sql·sqlserver
CHEN5_024 小时前
时序数据库选型“下半场”:从性能竞赛到生态博弈,四大主流架构深度横评
数据库·人工智能·ai·架构·时序数据库