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

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

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

4731 次点击
所在节点    数据库
48 条回复
sheeta
2021-05-21 14:36:53 +08:00
如果你的表再多一列,这个查询语句索引就会失效
yinusxxxx
2021-05-21 14:37:05 +08:00
我猜是 skip scan
weizhen199
2021-05-21 14:37:12 +08:00
什么库?
又不是不可以。oracle 也有 index skip scan
qwertyzzz
2021-05-21 14:39:05 +08:00
@weizhen199 mysql ?
qwertyzzz
2021-05-21 14:39:32 +08:00
@sheeta 为啥哦
qwertyzzz
2021-05-21 14:39:40 +08:00
@yinusxxxx 我看看
Suomea
2021-05-21 14:46:25 +08:00
可能是因为数据太少了,多弄点数据可以试试
qwertyzzz
2021-05-21 14:48:25 +08:00
@sheeta 试了下不会 还是有 Using index
qwertyzzz
2021-05-21 14:48:33 +08:00
@Suomea 我试试
sheeta
2021-05-21 14:48:53 +08:00
@qwertyzzz 和你 select 字段有关系, 如果你的 select 字段只包含主键或联合索引中的部分,是仍然能够使用到索引的
iminto
2021-05-21 14:55:42 +08:00
联合索引从来都没有 “最左原则”这个规则,这个规则纯属某些人写博客瞎扯,然后以讹传讹。

楼主可以试试三个字段的联合索引,你会发现,“最左原则”这种谎言会被一次次打脸。
qwertyzzz
2021-05-21 15:08:14 +08:00
@iminto 啊这 那我现在这个例子是不是就打破了呢。。
qwertyzzz
2021-05-21 15:08:53 +08:00
@sheeta 确实 加了新字段 如果 select 在里面 或者 select*就不会 但是看索引不是看 where 的吗。。我也不太明白
iminto
2021-05-21 15:12:59 +08:00
@qwertyzzz 如果是一个表建有三个字段 abc 的索引,那么无论 wher 条件里 abc 顺序如何,就算是 bca,cab 都能用上索引。如果 where 条件里只有两个字段,某些顺序可能无法用上索引,但一样是不遵循所谓最左匹配规则的。

所以你可以忽略“最左匹配”这种说法。
Jooooooooo
2021-05-21 15:17:59 +08:00
@iminto 感觉你理解错了最左的含义.

最左匹配是说, 如果创建了 abc 的联合索引, 那么 where 里只有 bc 或者 c 的情况下, 无法命中 abc 这个索引, 只有 a 或者 ab 才行.

另外一个例子是如果 a 是一个范围查询, 那么会导致只能踩中 a 而 bc 失效了
qwertyzzz
2021-05-21 15:21:23 +08:00
@iminto 是哎 顺序无所谓 因为会自动帮你优化,但是 2 个和 3 个有区别吗
@Jooooooooo 是额 最左匹配就是这个
weizhen199
2021-05-21 15:23:53 +08:00
@iminto 这是你自己理解有误
aijam
2021-05-21 15:31:51 +08:00
你可以试一试 select * from user; 他也会说是用到了 index 。这是一种特殊情况,和你后面 where 没太大关系。

“In some cases, a query can be optimized to retrieve values without consulting the data rows. (An index that provides all the necessary results for a query is called a covering index.) ”
参考: https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html

也就是说,mysql 知道所有的数据都在 index 里,即使是 full scan 也直接从 index 里取了。你只要多加一个列,就不是 covering index 了,就不有这样的优化。
qwertyzzz
2021-05-21 15:37:13 +08:00
@aijam 是的耶
jorneyr
2021-05-21 15:39:02 +08:00
这个 index,应该指的是索引树,所有的索引信息都单独保存到索引树里了,你的查询正好只用到索引树中的一列。

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

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

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

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

© 2021 V2EX