V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Philyu  ›  全部回复第 1 页 / 共 1 页
回复总数  6
ZmVpcWlfeXU=
2020-05-19 16:13:46 +08:00
回复了 qmzhixu 创建的主题 MySQL 关于覆盖索引的问题
聚簇索引的一个典型例子就是主键,它直接存储数据字段,比如 id ;如果你要查 select id from xxxx where id>n
这个当然不用回表;
如果 id 是主键,另外建立了 age 的普通索引,那么 select age from xxx where id>n,是可以索引覆盖,不需要回表。
2020-05-15 17:27:38 +08:00
回复了 qmzhixu 创建的主题 MySQL 关于覆盖索引的问题
age 不在索引里面,mysql 先找到索引 id=1,然后回表去找 age,当然没有索引覆盖。
2020-05-15 17:21:27 +08:00
回复了 noble4cc 创建的主题 MySQL mysql 索引工作的原理
我明白 lz 的意思,其实没有你想象的那么多 IO,首先索引是有序的,可以连续读取;就算 key 很分散,IO 次数也还跟 key 的数量在一个量级;查询到的记录再多,还是成片的,可以连续读取。
2020-05-15 17:02:41 +08:00
回复了 noble4cc 创建的主题 MySQL mysql 索引工作的原理
正常是这样,而且 mysql 会将部分用到的索引加载到内存,4 次或 1 次都很快;如果 in 里面是连续的值,大概率会被优化器优化。
2020-05-15 16:49:18 +08:00
回复了 noble4cc 创建的主题 MySQL mysql 索引工作的原理
mysql 的索引基础结构是 B+树,如 id in ( 1,2,3,4 ),那么会将 id 列的索引加载到内容,分布找到对应 id=1,2,3,4 的四行数据的偏移量,最少只需要一次 IO 。具体几次,涉及到你这表每一行的数据大小,因为磁盘读取,一次 IO 是 64K,有可能这 4 条数据都在了。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2802 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 11:49 · PVG 19:49 · LAX 03:49 · JFK 06:49
Developed with CodeLauncher
♥ Do have faith in what you're doing.