mysql模糊查询结果取反问题

 更新时间:2023年09月01日 08:37:43   作者:qq_35327536  
这篇文章主要介绍了mysql模糊查询结果取反问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql模糊查询结果取反

问题描述

1、表结构:

 

2、只要包含3这种类型的都不能查询。 

解决方式

1、模糊查询出所有包含3这种类型的数据,在使用not in这种方式:

SELECT * FROM system_account WHERE id NOT IN (SELECT id FROM system_account WHERE identity_type LIKE "%3%");

这种方式如果类型中有13、23这种带3的类型就需要修改模糊条件。

2、使用正则匹配方式:

SELECT * FROM `system_account` WHERE identity_type REGEXP "^([1,2,4,5,6,7,8,9]{1}\,?)*[1,2,4,5,6,7,8,9]{1}$";

这种方式只要在这种中排除3这种类型就可以了,但是没添加一种类型就需要修改一次sql语句。

同事问的这个问题,第一反应是模糊查询取反,所以感觉很有意思就记录一下。

最终这种方案也没有用上,同事把需求弄反了。

模糊查询可以使用 not like 这种查询方式 平时从来没有用过也没看见过 所以没想到这种方法

SELECT * FROM admin_produce_order WHERE product_code LIKE 'CP211%' AND po_come_factory NOT LIKE "%罗西%"

mysql模糊匹配后匹配优化

线上存在业务代码,需要模糊匹配且进行后匹配

select * from test where id like "%1231"

优化过程

mysql的后模糊匹配是不走索引的,所以数量级增大后,sql执行速度会越来越慢,但是业务一定要保留该功能,且频繁调用;

处理方案:

1. 使用表中已存在的其他列索引

如果查询的表存在其他列索引,可以直接使用模糊匹配查询完整的主键信息,再进行业务查询

select id from test where id like "%1231"
select * from test where id = #{id}

该方案简单迅速,查询索引级别一般可以达到index

2. 使用缓存记录模糊匹配列所有数据

先进行缓存记录所有模糊列数据,再经过缓存进行数据匹配,最后进行业务查询。

该方案需要保证缓存可靠,并且及时更新

3. 数据库增加相反列,并设置对应索引

例如,原模糊列为id,值为123,相反列起名id_reverse,值则为321

当进行模糊匹配时,先对传入参数进行却反,123取反为321,最后用相反列进行匹配

select * from test where id_reverse like "321%"

如果需要保证该条件同时满足前匹配和后匹配

select * from test where id like "123%" or id_reverse like "321%"

该方案需要保证相反列和模糊列数据保持相反,并同步更新,索引级别可达range

type索引类型:

ststem > const > eq_ref > ref > range > index > all

优化级别从左往右递减,没有索引的一般为’all’,需要对type进行优化前提是有索引。

其中’system’和’const’只是理想型,实际只能达到’ref’和’range’。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • PHP mysqli扩展库 预处理技术的使用分析

    PHP mysqli扩展库 预处理技术的使用分析

    本篇文章,介绍了PHP mysqli扩展库 预处理技术的使用分析。需要的朋友参考下
    2013-05-05
  • MySQL JSON类型字段的简单使用

    MySQL JSON类型字段的简单使用

    JSON作为现在最为流行的数据交互形式,在5.7版本开始新增JSON数据类型,本文就来介绍一下MySQL JSON类型字段的使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-08-08
  • 详解MySQL中事务的持久性实现原理

    详解MySQL中事务的持久性实现原理

    这篇文章主要介绍了详解MySQL中事务的持久性实现原理,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2021-01-01
  • mysql数据库之count()函数和sum()函数用法及区别说明

    mysql数据库之count()函数和sum()函数用法及区别说明

    这篇文章主要介绍了mysql数据库之count()函数和sum()函数用法及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • mysql聚集索引、辅助索引、覆盖索引、联合索引的使用

    mysql聚集索引、辅助索引、覆盖索引、联合索引的使用

    本文主要介绍了mysql聚集索引、辅助索引、覆盖索引、联合索引的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Mysql5.7服务无法启动的图文解决教程

    Mysql5.7服务无法启动的图文解决教程

    这篇文章主要介绍了Mysql5.7服务无法启动问题,解决办法非常简单,需要的的朋友参考下
    2017-02-02
  • MySQL9.0更新了哪些特性

    MySQL9.0更新了哪些特性

    MySQL 9.0作为MySQL数据库管理系统的一个重要更新版本,带来了多项新特性和改进,下面我们就一起来看看更新了哪些特性,感兴趣的可以了解一下
    2024-08-08
  • MySQL中连接池参数优化与性能提升指南

    MySQL中连接池参数优化与性能提升指南

    这篇文章主要深入探讨了MySQL连接池中的关键参数,分析参数配置不合理可能导致的性能问题,并分享实用的优化方法,希望可以帮助开发者提升系统性能
    2025-07-07
  • 图文介绍mysql中:=和=的区别

    图文介绍mysql中:=和=的区别

    这篇文章主要给大家介绍了关于mysql中:=和=区别的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 查询MySQL中的树型表两种方法

    查询MySQL中的树型表两种方法

    在 MySQL中查询树型表(即具有层级结构的表)可以使用递归查询或者使用嵌套集模型,下面介绍两种方法查询MySQL中的树型表,感兴趣的朋友一起看看吧
    2024-01-01

最新评论