1,背景描述我有一个user表,表结构如下:索引如下:表中数据如下:
可以看到表中数据是按lastname排序的,这是因为在lastname, familyname, city上有一个多列索引,userid上的主键(索引)是后加的,所以userid是无序的。mysql当中有没有一种方法可以重新生成(或组织)索引,让select userid, lastname from user这条语句的查询结果默认是按userid排序?
注意:不是强制使用索引select userid, lastname, from user force index(primary),而是重新生成或组织索引(reorganize)。
4月29日更新
其实,我这里是想问mysql是不是有某个命令可以对表中已有的索引进行重新组织,就是在表经过一段时间的更新、删除、插入操作后,数据会发生变化(结构不变),那么表的索引也就相应的会发生各种变化(比如底层的碎片等),那么是不是有一种方法可以对这些索引重新组织或者重新生成,再不然就只能删除索引再重建索引。
5月2日更新
我把最初提问的问题增加了删除线,开始的提问有些问题,特别是这儿的描述是错误的:“可以看到表中数据是按lastname排序的,这是因为在lastname, familyname, city上有一个多列索引,userid上的主键(索引)是后加的,所以userid是无序的可以看到表中数据是按lastname排序的,这是因为在lastname, familyname, city上有一个多列索引,userid上的主键(索引)是后加的,所以userid是无序的”,至于为什么是无序的,@clcx_1315已经回答了,而且他也指出即便重新组织(生成)索引,这句select userid, lastname from user也是无法实现让userid有序的。我百度了下,mysql当中好像没有专门用于重新生成或组织索引的命令,sql server数据库倒是有,感兴趣的朋友百度吧。
mysql有optimize table的用法,但是同时也把表重组了。
如果系统有明显的业务低峰期,删掉索引重建也是可以的。