在mysql中, 只有右模糊才走索引的原因:MySQL索引通常按列值的左侧前缀进行排序和存储,使用%通配符在列值的左侧执行模糊匹配会导致无法使用索引优化查询,需要进行全表扫描。因此,只有在LIKE查询中将%通配符置于列值的右侧时,MySQL才能够利用索引进行优化查询以提高查询效率。
一、在mysql中, 只有右模糊才走索引的原因
在 MySQL 中,索引通常是针对列值的左侧前缀进行排序和存储的。当使用 LIKE 查询语句时,如果使用“%”通配符在列值的左侧进行模糊匹配,那么 MySQL 将无法使用索引优化查询,而需要进行全表扫描。因此,只有在 LIKE 查询语句中,使用“%”通配符在列值的右侧进行模糊匹配时,MySQL 才能够利用索引进行优化查询,提高查询效率。这是因为只有右侧的列值前缀与查询条件相匹配,MySQL 才能够利用索引检索相关的记录,从而避免进行全表扫描。
二、MySQL LIKE 子句
在 MySQL 中,LIKE 关键字主要用于搜索匹配字段中的指定内容。其语法格式如下:
[NOT] LIKE '字符串'
解释:
- NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。
- 字符串:指定用来匹配的字符串。“字符串”可以是一个很完整的字符串,也可以包含通配符。
- 右模糊:范围索引
- 左模糊:不走索引,全表查询
LIKE 关键字支持百分号“%”和下划线“_”通配符:
- 搭配%使用:%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:
- 搭配_使用:_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一条数据。
三、mysql常用查询语句
1、LIKE的灵活运用
% :匹配一个或多个字符串
_ :匹配单个任意字符串
【】:中括号内的单个字符匹配
【^ 】:非括号内的单个字符匹配
2、分组查询
GROUP BY +HAVING
GROUP BY:用于分组,通常会与聚合函数(如max、sum、min、count等)搭配起来使用
HAVING:用于筛选,与where类似,但是一般会与GROUP BY搭配起来使用
3、子查询
一般用in 、not in、exsit、not exsit将主查询表与子表中的关联字段做连接
4、取两个表结果集中的差集
在oracle里面比较简单,可以用minus 来直接取出两个表的差集。在mysql里面没有此类关键字可以用,相对来说查询效率较高的,要用左连接的方式来查询。
SELECT a.*
FROM (SELECT * from malldb.mall_user_express_addr
WHERE user_id=’53’
) a
LEFT JOIN (SELECT *
FROM malldb.mall_user_express_addr
WHERE address LIKE ‘%今天%’
) b
on a.id=b.id
where b.id is null
5、分页查询
limit N,M 从N条开始到N+M条被取出
比如要取出第5页的数据,每页显示20条
select * from 表A limit 81,20
延伸阅读1:MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是较好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。