【发布时间】:2013-02-27 04:52:29
【问题描述】:
我以前从未设计过大型数据库,所以我从不关心索引。但是,现在我正在做一个需要大型数据库的大型项目。所以我正在确定我将在内部连接中使用它作为索引的每个表。
例如,其中一张大表具有如下字段:
Userid
Industryid
Teamid
Zoneid
我想要的任何东西都是指向第二张桌子的标识。所以我已经索引了这些。
此表有 60 个字段,但其中 16 个已编入索引 + 1 个主字段。
如果有这么大的表包含所有这些索引是个好主意吗?我预计这张表在 1 年内将超过 400 万条记录。我这样做的原因是为了让这张表与其他表之间的内部连接更容易和更快
在如此大的项目中使用索引的最佳方式是什么?
【问题讨论】:
-
所有四个字段看起来都可能是外键。而这四个组合的可能是一个自然的主键。我无法说出其他 12 个索引,但是对于数据模型而言,包含 60 个字段和 12 个索引的表看起来有点可疑。
-
实际上其中 12 个是外键,4 个是可搜索的。所以对于 eaxample 我有用户 ID 和用户名,尽管我有用户名是第二个表,称为使用。而且我不确定我是否在这里打对了电话,但这将在如此大的桌子上消除 1 个内部联接。此外,即使用户名因任何原因更改,它也会将用户名保留在历史记录中。
-
拥有一个包含 16 个 FK 的表要么违反 3NF/BCNF,要么是艺术品。避免(内部)连接的非规范化听起来像是过去的坏习惯,IMnsHO。
标签: sql database-design indexing