mysql 重置表索引_MySQL如何进行索引重建操作?

  • Post author:
  • Post category:mysql


在MySQL数据库中,没有类似于SQL Server数据库或Oracle数据库中索引重建的语法(ALTER INDEX … REBUILD),那么在MySQL数据库中,是否有什么方式重建索引呢? 在官方文档中”2.11.10Rebuilding or Repairing Tables or Indexes”中,提到下面三种方式可以Rebuild Index

·Dump and Reload Method

·ALTER TABLE Method

·REPAIR TABLE Method

另外, OPTIMIZE TABLE也会对索引进行重建,下面我们来简单验证、测试一下,如有不对或不足的地方,敬请指正。

第一种方法(mysqldump导出然后重新导入),相当于重新CREATE INDEXES , 这里就不讨论了。下面我们来看看其它几种方法,那么要判断索引是否REBUILD了呢?我们来测试验证一下吧,新建测试表如下:

CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,c2 VARCHAR(100),c3 VARCHAR(100) )ENGINE=InnoDB;create index ix_t1_c2 on t1(c2);

DROP INDEX + CREATE INDEX方法

这种方法过于简单,这里不叙说了。其实也没有啥好说的。

ALTER TABLE方法

那么我们能否在MySQL中找到索引的创建或修改时间呢?经过查证,目前而言,MySQL中是没有相关系统表或视图会记录索引的创建时间的,我们可以用间接的方法来间接验证,有些方法不是特别可靠和准确,最准确的方法应该是阅读源码:

1:表的创建时间,可以间接推断索引的创建时间。因为索引的创建时间肯定在表的创建时间之后。

2:对应表的idb文件的修改或创建时间(若文件从创建后不曾修改过则可认为创建时间=修改时间,关于更多详细内容,参考”),当然这种方法不是非常准确。我们知道,对于InnoDB存储引擎的表而言,对应的索引数据存储在ibd文件中,所以文件的创建时间或修改时间是间接判断索引创建时间。如果存储引擎为MyISAM的话,还有专门的索引文件MYI。

注意:show indexes from tablename不会显示索引创建时间

mysql> SELECT table_name,create_time FROM  information_schema.TABLES WHERE table_name=’t1′;+————+———————+| TABLE_NAME | CREATE_TIME         |+————+———————+| t1         | 2019-10-20 08:18:33 |+————+———————+1 row in set (0.01 sec)

然后我们对表进行ALTER TABLE t1 ENGINE



版权声明:本文为weixin_39644494原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。