取以下两张表:
table A
有大约 100k 行和 50 列,并且每月仅更新两次,此更新需要多长时间不是问题(只要不超过一天,我认为这不太可能:D)。它将非常轻微地增长,每年不超过 10k 行。table B
有 ~25k 行和 25 列,是ofcolumn F
的外键。这张表每天更新 100-1000 次,大部分时间是添加新行,所以很容易增长到几十万行。column C
table A
Table A
与 具有一对多关系table B
,两者column F
且column C
必须不为空,有自己的索引,并且column C
也是唯一的但不是 的主键table A
。的每一行与table B
中的一行都有唯一的对应关系table A
。
这两个表每天都被查询数千次,单独或使用允许几十种不同类型查询的应用程序使用它们的关系。
为查询中涉及的每一列建立索引,并为每种类型的查询建立一个复合索引是一个好主意吗?如果没有,可能的缺点是什么?
table A
因为只为最耗时的查询
table B
创建复合索引是个好主意吗?或者我应该为正在查询的每一列创建一个复合索引,因为这些查询可能在参数上有所不同,但在形式上却没有?table B
索引的问题在于它们是加速查询的极好工具,但它们也带来了开销。
我的经验表明,由于上述原因,索引几乎所有内容都会损害您的整体表现。
两者都
table A
应该table B
只包含最适合您的查询的索引。当然,随着您对数据库行为的更多了解,您的第一个索引决策可能需要随着时间的推移而改进。不要害怕在需要时添加额外的索引。并且不要害怕删除无用的索引。