可以自动在所有外键上创建索引吗?
李小翔
2014-08-05 11:00

内容列表

一般来说，数据库中建索引有利有弊，就外键来说，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_ 的索引。