欢迎进入Wiki » FAQ » 可以自动在所有外键上创建索引吗?

可以自动在所有外键上创建索引吗?

在2014-08-05 11:00上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

一般来说,数据库中建索引有利有弊,就外键来说,Oracle数据库的建议如下:

  • 如果外键不添加索引, 以下3种情况会导致修改父表时锁住子表

        1、更新父表主键,子表会被锁住

        2、删除父表一行, 整个子表会被锁住

        3、合并到父表,子表会被锁住。(9i,10G是这样,11G不会)。

  • 如果满足以下三种情况,则不需要在外键建立索引

        1、没有从父表删除数据

        2、没有更新父表主键

        3、没有父表关联到子表

所以,一个典型的观点就是,凡是外键都创建索引,利大于弊。

Grails 中默认情况下是不会给外键创建索引的(某些数据库会),因此,BroToolkit 中添加了配置:

/** 是否在所有外键上创建索引 */
bropen.toolkit.gorm.foreignkey.index.all = false

该配置默认为 false,即不自动创建外键索引,如果在 Config.groovy 将其设为 true,则会自动在所有外键上创建名称前缀为 IFK_ 的索引。

在2014-08-05 10:59上被李小翔创建

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号