数据库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;
    }
相关推荐
今天又得骑车了20 分钟前
一、MySQL 8.0 之《EXPLAIN ANALYZE 执行计划》
数据库·mysql·database
野犬寒鸦1 小时前
MyBatis-Plus 中使用 Wrapper 自定义 SQL
java·数据库·后端·sql·mybatis
我爱一条柴ya2 小时前
【AI大模型】RAG系统组件:向量数据库(ChromaDB)
数据库·人工智能·pytorch·python·ai·ai编程
北北~Simple2 小时前
第一次搭建数据库
服务器·前端·javascript·数据库
鸢想睡觉2 小时前
【数据库基础 1】MySQL环境部署及基本操作
数据库·mysql
没有口袋啦2 小时前
《数据库》MySQL备份回复
数据库
c7_ln2 小时前
MYSQL C_API使用全解
c语言·数据库·mysql
karry01302 小时前
高并发导致重复key问题--org.springframework.dao.DuplicateKeyException
java·数据库·ide
经典19923 小时前
mysql 锁介绍
数据库·mysql
不太可爱的大白3 小时前
Mysql分片:一致性哈希算法
数据库·mysql·算法·哈希算法