MySQL最佳实践:一个表是否应该拥有多个索引?

3

抱歉大家,

我有一个带有3列的小表格,但是我将按照一列或另一列列出值。

1)两个列都有索引,这样可以吗?

2)每个表格只应该有一个索引吗?

3)在极限情况下,如果我们有一个拥有100列的表格,并且其中50列具有索引,这样可以吗?

谢谢, MEM

3个回答

5

只要你在使用它们,拥有多个索引甚至在一个表上有多个索引都是可以的。

在查询中运行EXPLAIN并检查哪些索引被使用。如果有索引没有被任何查询使用,则它们不会给你带来任何好处,只会减慢对表的修改速度。这些未使用的索引应该被删除。

如果尚未这样做,您可能还需要考虑使用多列索引。


我明白了... 我正在努力更好地理解何时应该有两个索引或使用一个多列索引的原因。对于获取名字(firstname和lastname)的索引,这是有意义的... 但我必须看到更多关于它的例子。感谢您在这个简单问题上提供的这两个新东西。 ;) EXPLAIN 和多列索引。 :D - MEM
这是很好的建议,许多人只是索引所有字段,甚至不考虑使用多个索引。Mark,你知道如果有很多索引更新表时会减慢多少吗? - Gary Green

1

在一个表中有多个索引是没有问题的,而且每个表只有一个索引也不是真正的指南。

过多的索引是效率低下的,因为

  • 它需要额外的存储空间
  • MySQL 需要确定哪个索引用于特定的查询

编辑:根据 Pablo 和 Mark 的建议,您需要了解数据被访问的方式,以便构建有效的索引。然后您可以对索引进行细化和减少。


谢谢。性能和空间似乎是问题所在。所有答案都指向这个方向。:) 非常感谢。 - MEM

1

为了快速回答你的问题,我认为:

  1. 是的,拥有两个甚至更多带索引的列是可以的。
  2. 不一定。您可以在一个表中拥有多个索引。
  3. 这可能是可以的,也可能不可以。这取决于情况。索引需要占用磁盘空间,并且它们使修改数据(INSERT/UPDATE/DELETE)的操作变慢,因为对于每个操作,都会涉及到表索引的更新。

您的索引创建应该由您的查询驱动。查看您的系统将要进行的查询,并相应地创建索引。


清楚了。就像Mark Byers建议的那样,可以使用我之前不知道的EXPLAIN来确定这一点。感谢你抽出时间回答 :) - MEM
是的!Explain是你的好朋友!在MySQL和几乎所有其他关系型数据库服务器中... - Pablo Santa Cruz

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