一直都有一种错觉,认为查询出来的数据如果没有设置排序的话,就是按照id(主键)自增的顺序排列,也就是id的正序排列。但是偶然的一个机会,发现了如果没有加排序的话,出现的不是想象中的自增顺序(逻辑顺序),那是什么顺序呢?答案就是物理存储顺序。
虽然一般情况,物理顺序和逻辑顺序保持一致,但是有个前提,那就是再你不删不改的情况下。如果你细心观察过会发现,当你进行大量的删除操作的时候,虽然数据量会减少,但是所占用的空间并没有减少。这些空间会在新数据插入的时候被利用起来,这就是为什么我们没有使用排序查询数据的时候,会出现与预期不一样的结果。
例如我们数据表中插入了id为1-10的数据,此时我们删除1,然后插入11,那么此时物理顺序是什么?应该是2,3…,11,还是11,2,3…呢?这就需要看删除的1的空间是否能够容纳数据11的插入,如果能够,就会在原来1的空间上插入数据11,如果不能,就另辟新的空间插入11。
整理表碎片
因此并不是删除的空间都能够被利用起来,为了提高空间利用率,我们应该学会整理这些表碎片。
optimize table table_name
查询的时候记得排序
由于逻辑顺序和物理顺序并非永远一致,所以我们在查询数据的时候记得带上order,确保查询出来的数据的顺序跟你想要的顺序一致。