2010-09-13 64 views
3

对不起所有,mysql - 很好的实践:有更多的索引表吗?

我有3列这款迷你表,但是,我将在一个或另一列列出值。

1)有两个带有索引的列可以吗?

2)我们应该每个表只有一个索引?

3)在极限情况下,如果我们有一个例如10​​0列的表格,并且我们有50个索引,那么这样好吗?

感谢, MEM

回答

5

它的优良有很多指标,甚至在一个表上,多个索引,只要您使用的是他们

对您的查询运行EXPLAIN并检查正在使用哪些索引。如果有索引没有被任何查询使用,那么它们不会给您带来任何好处,并且会减慢对表格的修改。这些未使用的索引应该被删除。

如果您还没有这样做,您可能还需要考虑多列索引。

+0

非常感谢您的澄清。 :) – MEM 2010-09-13 11:51:50

+0

我看到...我试图更好地理解何时应该有两个索引或使用一个多重索引的基本原理。对于抓住名字和姓氏的名字索引,这是有道理的......但我必须看到更多关于它的例子。感谢在这样一个简单问题上的这两件新事。 ;)EXPLAIN和多列索引。:D – MEM 2010-09-13 12:00:34

+0

这是个好建议,很多人只是索引所有的字段,甚至不考虑使用多个索引。如果你有很多索引,Mark会不会在更新的时候知道它会减慢表格的速度? – 2010-09-13 12:20:14

1

对于每个表有多个索引没有问题,并且不是,每个表的一个索引不是真正的指导原则。

有过多的索引是低效的,因为

  • 它需要额外的存储
  • MySQL需要来确定使用特定的查询该指数

编辑:按照巴勃罗和马克,你需要了解如何您的数据正在被访问,以便您建立有效的指数。然后您可以改进和减少索引。

+0

谢谢。所以表现和空间。似乎是问题。所有的答案似乎都指向了这个方向。 :) 非常感谢。 – MEM 2010-09-13 11:55:50

1

要快速回答您的问题,我认为:

  1. 是的,它的确定有两个或更多的列使用索引
  2. 不一定。每个表可以有多个索引。
  3. 这可能是好的,也可能不好。这取决于。带索引的事情是它们占用了空间(在DISK中)并且它们使修改数据的操作(INSERT/UPDATE/DELETE)变慢,因为对于每个人和每个人来说,都会有一个TABLE INDEX更新。

您的索引创建应由您的查询驱动。查看你的系统将会有哪些查询,并相应地创建索引。

+0

清除。因此,就像马克·比尔斯建议的那样,EXPLAIN(我不知道btw)可以用于这样的决定。感谢您的时间回答。 :) – MEM 2010-09-13 11:57:01

+0

是的!解释一下你的**朋友**!在MySQL和几乎所有其他关系数据库服务器中...... – 2010-09-13 12:10:16

相关问题