禁用mysql的自动索引

时间:2014-08-21 17:55:46

标签: mysql indexing

我理解MySQL会自动在每个表的主键和外键上放置一个索引。

但是,我想亲自在外键上创建自己的索引,因为我想用hibernate执行一个查询,显示我在执行和不使用索引时的时间差异。

MySQL Workbench中是否有任何选项可以禁用它的自动索引功能?

2 个答案:

答案 0 :(得分:1)

您无法禁用表上索引的自动索引创建。这是一个内置功能,在MySql中添加。

但是如果你想要你可以删除这样的索引:

DROP INDEX index_name ON tbl_name

然后再次创建它。

来自InnoDB and FOREIGN KEY Constraints

  

“InnoDB需要外键和引用键的索引才能这样做   外键检查可以很快,不需要表扫描。在里面   引用表时,必须有一个索引所在的外键   列以相同顺序列为第一列。这样的   如果不是,则会自动在引用表上创建索引   存在。 (这与某些旧版本形成对比,其中包含索引   必须明确创建或创建外键   约束将失败。)index_name,如果给定,则按所述方式使用   先前“。

答案 1 :(得分:1)

不,始终会创建这些索引。否则,修改这些列的每个UPDATEINSERT都必须执行全表扫描,以确保主键是唯一的,并且外键具有有效的引用。

关于外键,documentation说:

  

MySQL需要外键和引用键上的索引,以便外键检查可以快速而不需要表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列。如果索引不存在,则会自动在引用表上创建这样的索引。