这个为什么会使用到索引呀

2021-05-21 14:32:44 +08:00
 qwertyzzz

看了下联合索引 不是最左原则吗 name 和 name,sex 应该都可以把 为什么单独一个 sex 也可以

4705 次点击
所在节点    数据库
48 条回复
yeqizhang
2021-05-21 15:40:49 +08:00
@iminto 听你这么一说,上次因为看别人发面试题提到了问最左原则,我还去研究了一番,这就比较尴尬了
iminto
2021-05-21 15:45:48 +08:00
@Jooooooooo 如果三个字段的话,应该是只有 b,只有 c,只有 bc/cb,这三种情况会用不上索引。其余都可以
iminto
2021-05-21 15:48:18 +08:00
@Jooooooooo 也可以简单理解为只要有 a 就可以用到索引。这个如果按“最左”来理解,那倒确实是可以的。
GuuJiang
2021-05-21 15:51:33 +08:00
@qwertyzzz 这里指的是覆盖索引,简单说就是不需要回表,只要你查询的列全都属于索引自然就满足覆盖索引
@iminto 你才是属于以讹传讹吧,明明是你自己理解错误,谁说最左原则指的是在 where 里的顺序了?其实这是个简单的逻辑问题,如果 ABC 的组合是有序的,那么单独取出 AB 或者 A 仍然是有序的,这就是索引能继续发挥作用的原因,但是单独取出 B 、C 、BC 则不再是有序的,索引自然也就起不到作用了,这才是“最左原则”的本质
zlowly
2021-05-21 15:59:45 +08:00
MySQL 8.0.13 开始支持 index skip scan 也即索引跳跃扫描。该优化方式支持那些 SQL 在不符合组合索引最左前缀的原则的情况,优化器依然能组使用组合索引。
不过你这个测试数据太少,也不知道有没做表分析。建议生成个几万行测试数据,如果 sex 按含义只存放 2 种(或者几种)数据,估计就算你是独立的索引,优化器也不会选择用这个索引。
skymei
2021-05-21 15:59:47 +08:00
因为你的索引就覆盖了所有数据呀,覆盖了那必然会用到,你试试多加一列没索引的列,上面的索引就用不到了
qwertyzzz
2021-05-21 16:04:22 +08:00
@GuuJiang 应该是 你这个就感觉说到点了
qwertyzzz
2021-05-21 16:07:14 +08:00
@skymei 嗯嗯 上面有个和你说的一样 3q
VincentYe123
2021-05-21 16:13:05 +08:00
@GuuJiang 他可能不知道有个查询优化器的东西
tiedan
2021-05-21 16:54:47 +08:00
索引覆盖
hhyyd
2021-05-21 19:10:52 +08:00
@iminto where 里面的 abc,bca,cba 条件,mysql 会做优化,匹配到相关索引
hhyyd
2021-05-21 19:16:33 +08:00
@iminto 最左匹配的原则是, 他索引存的数据结构本身决定的。

除非像楼上说的(索引跳跃扫描),mysql 再做其他优化, 不然就是最左匹配的
Dganzh
2021-05-21 19:32:44 +08:00
根据楼上说的,select 字段 from tb where ***, 这种语句只要字段有建索引就一定能走索引?跟 where 后面无关?
zhongpingjing
2021-05-21 20:06:59 +08:00
Using index 是使用索引覆盖的意思,type 为 index 代表扫描了整个索引树,也就是说这个查询没有用到索引来筛选数据
shenqicai
2021-05-21 23:25:36 +08:00
是上个月来我司面试要求拿走面试题目的那一位吗? 一模一样的题目
littlewing
2021-05-22 01:10:57 +08:00
mysql 的执行计划中,对索引进行全表扫描也叫 using index,比如用到了覆盖索引的情况下,明显扫描索引比扫描主表更快,这也叫 using index
medivh
2021-05-22 02:42:29 +08:00
球球你们了,“性别” 是 Gender...
leafre
2021-05-22 10:39:27 +08:00
index,索引物理文件全扫描,和 all 差别不大
JemGao
2021-05-22 12:11:01 +08:00
@medivh 😏
Mitt
2021-05-22 14:38:31 +08:00
@medivh #37 这个大部分情况下用 sex 也没毛病吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778366

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX