每个数据库表应该有多少个索引?

3

在MySQL中,一个表最好有多少个索引?

我有一张名为company的表,在其中主要搜索IDstatecategory


1
你将在这个表上运行哪些查询?插入、更新、选择、删除? - Srikar Doddi
更多的细节会有所帮助。我们必须猜测ID可能是您的主键,而不是ID和类别的组合(这完全有可能)。如果您发布模式,我们会有更好的想法。 - wlangstroth
你可以通过搜索id、state、cat来查找,也可以通过搜索它们的方式进行查询。对我而言,“FOR”意味着它们在选择列表中。例如,我通过艺术家搜索歌曲,这里的“BY”是在where子句中使用的。 - Stephanie Page
2个回答

8
这个问题没有一个单一的答案:创建尽可能多的索引以使查询足够快,但不要过多。
在决定建立哪些索引时,您必须权衡各种因素:
- 索引越多,插入和更新的速度就越慢(因为它们需要更新所有索引)。 - 如果数据库需要进行表扫描,则没有适当索引的表上的查询可能非常缓慢。 - 有些列不需要索引(例如,“gender”列,其中唯一可能的值是“M”或“F”)。
对于您特定的情况,似乎三个索引,一个在ID上(如果这是主键,则已经具有隐式索引),一个在状态上,一个在类别上,就足够了。

我怀疑仅凭州或类别可能没有用处。但是如果没有基数,就无法知道。如果他们在所有50(53)个州都做生意,那么也许你可以通过这些索引获得表格的1-5%,但如果它是一个主要在10个州内经营业务的区域性企业,那么它可能没有足够低的聚集因子来派上用场。 - Stephanie Page

0

没有"首选"索引数量,这完全取决于你的查询。在你的例子中,你最多只需要3个索引,一个用于ID,一个用于状态,另一个用于类别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接