请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

表结构:
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列默认就是有序排列吗?

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

正在回答 回答被采纳积分+3

1回答

sqlercn 2019-08-26 14:06:40

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

0 回复 有任何疑惑可以回复我~
  • 提问者 ericdemon #1
    老师,我有点明白了,其实对于c列来说它本身已经是排好序了,然后c列指向的是排好序的主键地址,而主键原本也是排好序的,所以索引c中其实 是按照order by c , a , b 这样的排序吗? 还是说order by 根本不需要排序,在被创建的时候已经排好序了
    回复 有任何疑惑可以回复我~ 2019-08-26 19:32:55
  • sqlercn 回复 提问者 ericdemon #2
    不是的,Innodb是按主键的顺序存储的,c列上的索引只能保证在索引中是按c列存储的,但是把数据加载到内存中后这个顺序 就不一定了,所以要按指定的顺序输出数据就必需要使用order by子句。
    回复 有任何疑惑可以回复我~ 2019-08-26 21:38:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信