MySQL的模糊搜索

1.模糊搜索

第一时间我马上想到了关键字 like

1.1.所要查询的字段中包含特定 字符,但不确定其位置,使用两个%包起来

select * from phone where provider like ‘%Apple%‘

可以匹配 ‘AppleXXX‘,       ‘xxAppleXX‘,      ‘ABCDefgApple‘

1.2.能够确定要查字段的结尾,则如下:

select * from Student where name like ‘%聪‘;

可以匹配到 ‘黄聪‘,   ‘聪‘,    ‘xxx聪‘ (必须是以聪结尾的)

1.3.确定开头的,

select * from Student where name like ‘黄%‘;

可以匹配到 ‘黄聪‘,    ‘黄XXXXX‘ (必须是以黄开头的)



可以观察到,凡是使用关键字 like 就必须与 百分号% 结合使用,针对以上三种情况

一、 能够确定开头的:在确定部分后加百分号, like ‘Tom%

二、 能够确定结尾的,在确定部分前面加百分号, like ‘%Tom‘

三、 只知道包含,但不能确定具体位置的, like ‘%Tom%

特别注意:由于like的效率通常非常低,所以尽量少用,如果非得用,最好是符合第三种情况,也就是确定开头内容的,

因为这样是能够使用到索引的,而另外两种则无法使用索引,会扫描全表,所以特别慢。

2. 使用MySQL内置函数

请参考:MySQL使用内置函数来进行模糊搜索(locate()等)

3. 使用MySQL的全文索引

时间: 2024-10-26 03:18:02

MySQL的模糊搜索的相关文章

First-blog:解决mybatis 用mysql进行模糊搜索时,查不了中文问题

如图:点击小字 按搜索时,出现乱码搜索不了 解决办法:出现乱码问题,一般无非两种 1.是数据库问题 2.是服务器问题 我在MySQL命令行搜索时,中文可以实现,说明时服务器问题 通过修改 tomcat 下 cof 文件夹里的 service文件,在 <connecter 尾端添加 URIEncoding="UTF-8"/> 问题解决 原文地址:https://www.cnblogs.com/coldfirecx/p/9830248.html

mysql用户管理, 常用sql语句,mysql数据库备份恢复

mysql用户管理 新创建一个指定IP的用户,可以访问mysql的某些库某些表. 所有库的所有表,如果想指定访问某个库某些表,只需要修改名称user1 指定用户名br/>@后面的ip是指定ip,%表示所有的ipindentified by 后面是用户的密码验证用用户user1登录也可以指定localhost,登录时不输入本机ip地址即可访问查看授权,用于授权给新用户,新权限: 常用sql 语句 查看库表的行数搜索:select count() from mysql.user;搜索:select

django面试六

Redis缓存击穿.缓存雪崩.缓存重建 回答参考: 缓存击穿: 当一个连接访问缓存数据库中不存在的数据时,会直接通过缓存数据库到后端数据库中查找数据,但如果有大量连接在查询一个不存在的数据,就会有大量连接直接访问到后端数据库,给后端服务器造成巨大压力,可能导致后台服务器崩溃的情况.  解决方案:当查询一个不存在的缓存数据时,访问数据库,如果发现后端数据库也不存在这个文件,将这个查询的key在缓存中保存为None.下次再有连接请求这个key时直接从缓存中返回. 缓存雪崩: 缓存数据一般会设置过期时

MySQL模糊搜索的四种用法

1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"等等有"三"的记录全找出来. 另外,如果需要找出u_name中既有"三"又有"猫"的记录,请使用a

MySQL使用内置函数来进行模糊搜索(locate()等)

常用的一共有4个方法,如下: 1. 使用locate()方法 1.1.普通用法: SELECT `column` from `table` where locate('keyword', `condition`)>0 类似于 java 的 indexOf();不过 locate() 只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0: 1.2. 指定其实位置: SELECT LOCATE('bar', 'foobarbar',5);  --> 7 (从foobar

MySQL使用locate函数来进行模糊搜索

SELECT * from t_bank_card_user where LOCATE(bank_name,'中国建设银行哈哈哈黑社会')>0 原文地址:https://www.cnblogs.com/fenghua/p/9821144.html

单机数据库优化的一些实践(mysql)

数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问起,一步一步问到分库分表,中间会穿插很多数据库优化的问题.本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正. 1.表结构优化 在开始做一个应用的时候,数据库的表结构设计往往会影响应用后期的性能,特别是用户量上来了以后的性能.因此,表结构优化是一个很重要的步骤.

数据库MySQL 通配符与模式匹配正则表达式

今天一个同事说他写了一个sql语句查询没有结果,他是这样写的  SELECT * FROM Persons WHERE City LIKE '[BLN]%' 那么就再理一下: SQL通配符是使用特殊字符或语法拼写,用来执行模糊搜索指令的语句.查询数据库中的数据时,sql通配符可以替代一个或多个字符.使用是必须与 LIKE 运算符一起使用.在SQL中可以使用的通配符有: 通配符 说明 % 替代一个或多个字符 - 仅替代一个字符 [charlist] 字符列中的任何一个字符 [^charlist]或

mysql性能优化总结1

MySQL性能优化总结 一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件.首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.MYI文件,分别存放了表的数据(.MYD)和索引数据(.MYI).每个表都有且仅有这样三个文件做为MyISAM存储类型的表的存