mysql索引 - mysql的表如何重新组织(或生成)索引?

查看:174
本文介绍了mysql索引 - mysql的表如何重新组织(或生成)索引?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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的用法,但是同时也把表重组了。
如果系统有明显的业务低峰期,删掉索引重建也是可以的。

这篇关于mysql索引 - mysql的表如何重新组织(或生成)索引?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆