我理解MySQL会自动在每个表的主键和外键上放置一个索引。
但是,我想亲自在外键上创建自己的索引,因为我想用hibernate执行一个查询,显示我在执行和不使用索引时的时间差异。
MySQL Workbench中是否有任何选项可以禁用它的自动索引功能?
答案 0 :(得分:1)
否您无法禁用表上索引的自动索引创建。这是一个内置功能,在MySql中添加。
但是如果你想要你可以删除这样的索引:
DROP INDEX index_name ON tbl_name
然后再次创建它。
来自InnoDB and FOREIGN KEY Constraints
“InnoDB需要外键和引用键的索引才能这样做 外键检查可以很快,不需要表扫描。在里面 引用表时,必须有一个索引所在的外键 列以相同顺序列为第一列。这样的 如果不是,则会自动在引用表上创建索引 存在。 (这与某些旧版本形成对比,其中包含索引 必须明确创建或创建外键 约束将失败。)index_name,如果给定,则按所述方式使用 先前“。
答案 1 :(得分:1)
不,始终会创建这些索引。否则,修改这些列的每个UPDATE
或INSERT
都必须执行全表扫描,以确保主键是唯一的,并且外键具有有效的引用。
关于外键,documentation说:
MySQL需要外键和引用键上的索引,以便外键检查可以快速而不需要表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列。如果索引不存在,则会自动在引用表上创建这样的索引。