mysql索引求解
- 内容介绍
- 文章标签
- 相关推荐
对于一个主键为id的表 普通索引 idx_a(a) 和 idx_a_id(a,id)到底有没有区别
大模型对于这个问题的答案似乎一直比较模糊 有时候说没区别 有时候说有区别
innodb
网友解答:--【壹】--:
不知道区别的话,去数据库里EXPLAIN查询你就知道了
--【贰】--:
id是主键 InnoDB 的二级索引叶子节点会带主键
--【叁】--:
innoDB的普通索引都是带id的所以没有区别
image759×659 40.3 KB
image788×526 35.7 KB
--【肆】--:
我建议去问gpt 能给你说的很清楚 怎么可能会模糊呢 联合索引需要遵循最左匹配原则 否则会索引失效 肯定是有区别的啊
--【伍】--:
没区别呀,二级索引会自动带上主键的吧,阿巴阿巴
--【陆】--:
- **idx_a_id(a,id)**这个索引没有意义啊.id为主键,idx(a,id) == idx(id) ,主键本身就是默认的UNIQUE索引,你又查a又查主键,那跟查主键没什么区别,这种脱裤子放屁的垃圾SQL会被SQL优化器自动优化,不会按最左原则。
- idx_a(a) 这是a字段的索引,会在where a 或where a and b and c]的时候(a条件在前面)生效。
- 具体情况,你自己explain下,问100个人也不如explain。
--【柒】--:
问题就是显式和隐式有没有区别 或者说在有idx_a(a)的情况下 是不是任何类型的查询 都不需要idx_a_id(a,id)
--【捌】--: fatesealed:
idx_a_id(a,id)
idx_a_id(a,id) 这个本质上脱裤子放屁,a 上本来就有 id,建议删掉 id,换成其他的
--【玖】--: fatesealed:
用 force index 的话 看起来是没区别的
对了,用EXPLAIN ANALYZE, 看实际执行时间&实际行数,看看那个更适合你的应用
这种还是去实践比较好,这两个没有什么大区别
如果优化器认为没区别,那你看实际执行的时候的执行时间,命中的哪一个
--【拾】--:
innoDB的话,这两个应该没有任何区别
--【拾壹】--:
最佳左前缀原则,对于使用上,查询使用只用a字段查询都会命中索引,没有区别。
比较固定的查询条件可以用a,id这种。
--【拾贰】--:
先说存储引擎啊
有区别
普通索引a,实际索引时会隐式包含主键
a,id, 直接显示包含了
--【拾叁】--:
用force index的话 看起来是没区别的
对于一个主键为id的表 普通索引 idx_a(a) 和 idx_a_id(a,id)到底有没有区别
大模型对于这个问题的答案似乎一直比较模糊 有时候说没区别 有时候说有区别
innodb
网友解答:--【壹】--:
不知道区别的话,去数据库里EXPLAIN查询你就知道了
--【贰】--:
id是主键 InnoDB 的二级索引叶子节点会带主键
--【叁】--:
innoDB的普通索引都是带id的所以没有区别
image759×659 40.3 KB
image788×526 35.7 KB
--【肆】--:
我建议去问gpt 能给你说的很清楚 怎么可能会模糊呢 联合索引需要遵循最左匹配原则 否则会索引失效 肯定是有区别的啊
--【伍】--:
没区别呀,二级索引会自动带上主键的吧,阿巴阿巴
--【陆】--:
- **idx_a_id(a,id)**这个索引没有意义啊.id为主键,idx(a,id) == idx(id) ,主键本身就是默认的UNIQUE索引,你又查a又查主键,那跟查主键没什么区别,这种脱裤子放屁的垃圾SQL会被SQL优化器自动优化,不会按最左原则。
- idx_a(a) 这是a字段的索引,会在where a 或where a and b and c]的时候(a条件在前面)生效。
- 具体情况,你自己explain下,问100个人也不如explain。
--【柒】--:
问题就是显式和隐式有没有区别 或者说在有idx_a(a)的情况下 是不是任何类型的查询 都不需要idx_a_id(a,id)
--【捌】--: fatesealed:
idx_a_id(a,id)
idx_a_id(a,id) 这个本质上脱裤子放屁,a 上本来就有 id,建议删掉 id,换成其他的
--【玖】--: fatesealed:
用 force index 的话 看起来是没区别的
对了,用EXPLAIN ANALYZE, 看实际执行时间&实际行数,看看那个更适合你的应用
这种还是去实践比较好,这两个没有什么大区别
如果优化器认为没区别,那你看实际执行的时候的执行时间,命中的哪一个
--【拾】--:
innoDB的话,这两个应该没有任何区别
--【拾壹】--:
最佳左前缀原则,对于使用上,查询使用只用a字段查询都会命中索引,没有区别。
比较固定的查询条件可以用a,id这种。
--【拾贰】--:
先说存储引擎啊
有区别
普通索引a,实际索引时会隐式包含主键
a,id, 直接显示包含了
--【拾叁】--:
用force index的话 看起来是没区别的

