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

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

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

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

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

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

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

CREATE TABLE `test_a` (

id int PRIMARY KEY AUTO_INCREMENT,

  `id_a` varchar(20) ,

  `name` varchar(20) ,

  `sort` int(11) DEFAULT NULL,

  `sort1` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

自增主键,mysql会自动创建唯一索引

表里记录4条

EXPLAIN SELECT * from test_a WHERE id in(1,2,3)

走索引在指定范围内进行查询 range

EXPLAIN SELECT * from test_a WHERE id in(1,2,3,4)

全表扫描,不走索引,表里有4条数据,查询也是4条,mysql判定全表扫描

mysql会根据表里的总条数和查询条数判定是否应该走索引,自己指定force index(索引名字)

mysqlunionall无法走索引11 27

1. like %%失效。 方案:改为like %,只写后面的%就能走索引。

2. 虽然有索引,但是查询条件没有索引列或者order by 排序没有索引列。 方案:让查询条件有索引列

3. 索引列存在null值的情况。 方案:索引列如果没有值,则给空字符串或者数字的0,总之就是不要设置null


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存