mysql根据索引去修改数据,会走索引吗

mysql根据索引去修改数据,会走索引吗,第1张

不一定,要看情况,具体是由MySQL优化器内部决定是全表扫描还是索引查找,用效率较高的一种方式。

针对索引字段的唯一性不高的情况下(索引的"区分度"低),优化器可能会选择全表扫描,而不是走索引。这可能是因为等值查询符合条件的记录太多了,导致了mysql认为全表扫描比用索引查找更快。

比如你对唯一性不高的字段(如性别:男/女)加了索引,这样通过索引去查找可能还需回表,还不如直接全表扫描!

若in中的数据量较大时,基本就不走索引了。如果你索引字段是一个unique,in可能就会用到索引。

如果你一定要用索引,可以用 force index。可能也和MySQL版本有关(5.6以后有做in的查询优化)

在innoDB中,有两大索引类,分别是

执行上述语句,执行过程如下图

从图中,我们可以看出,扫了两个索引树

(1)先从普通索引name找到lisi

(2)再根据主键值9,再在聚集索引中找到行记录。

这就是回表查询,先在普通索引中找到主键值,再在聚集索引中找到行记录。

很显然,在一棵索引树上就能获取SQL所需的所有列数据的,就是索引覆盖。

如下语句

很显然,我们可以直接在name索引上直接找到id,name,不用再去回表。

而且我们通过explain的extra属性也能观察到

像我们开头的SQL语句

我们只需要在name索引中再加个sex,name(name,sex),这样变成了联合索引,也是索引覆盖。

mysql 添加索引后 在查询的时候是mysql就自动从索引里面查询了。如果需要也可以单独根据索引查询,这个看使用场景

MYSQL在创建索引后对索引的使用方式分为两种:

1 由数据库的查询优化器自动判断是否使用索引;

2 用户可在写SQL语句时强制使用索引


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7560875.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存