老师,我这边有一个关于索引排序的问题想咨询一下您

来源:6-28 【实战】使用Update语句修改数据

ericdemon

2019-08-26

表结构:
CREATE TABLE geek (
a int(11) NOT NULL,
b int(11) NOT NULL,
c int(11) NOT NULL,
d int(11) NOT NULL,
PRIMARY KEY (a,b),
KEY c (c),
KEY ca (c,a),
KEY cb (c,b)
) ENGINE=InnoDB;

老师,对于主键(a,b)来说,是a列排好序后,b列再排序
但是如果选择索引(c,a),那么c列先排好序,然后是a列再排序,然后因为主键(a,b)原本有序,所以b列默认就是有序排列吗?

其实对应索引的排序有点模棱两可的,然后今天在学习的时候发现了这个问题

写回答

1回答

sqlercn

2019-08-26

非主键索引指向的主键的地址,所以对于索引ca来说,实际上是包括主键(a,b)的。

0
2
sqlercn
回复
ericdemon
不是的,Innodb是按主键的顺序存储的,c列上的索引只能保证在索引中是按c列存储的,但是把数据加载到内存中后这个顺序 就不一定了,所以要按指定的顺序输出数据就必需要使用order by子句。
2019-08-26
共2条回复

零基础入门 详解企业主流数据库MySQL8.0

掌握SQL优化与慢查询优化,具备独当一面的能力

1641 学习 · 485 问题

查看课程