0

我有一个表/模式,其中有两列名为dayDateTimeuser_idInteger。知道我把两列都编入索引了。

考虑到索引使用的额外空间的很大一部分并且只有两列,从索引中获得的性能改进是否值得?你如何为他们辩护?

如果我使用 MongoDB 或 MySQL,这有什么不同?

4

2 回答 2

2

如果行数很少,您可能看不到索引有很大的改进。如果有很多行,您可能会看到很大的改进。

好处是您不必猜测,也不必为少数多数在实践中的含义而苦恼。每个现代 SQL dbms 都包含一些测量 SELECT 语句性能的方法。这包括 MySQL。

于 2012-10-25T18:02:31.353 回答
1

从索引中获得的性能改进是否值得

取决于您打算运行的查询。

  • 如果你有类似: 的东西WHERE day = ...,那么你需要一个索引,其前沿包含day. 如果使用得当,索引可以将查询速度提高许多数量级,尤其是在大型数据集上。
  • OTOH,每个额外的索引都会消耗空间/缓存和 INSERT/UPDATE/DELETE 性能。

归根结底,我建议您根据实际数据量进行衡量并得出自己的结论。

顺便说一句,如果您使用 InnoDB,那么您的表是聚集的(另请参阅:了解 InnoDB 聚集索引)并且整个表有效地存储在主索引中。聚集表中的二级索引包含 PK 字段的副本,(我假设)user_id在这种情况下。由于我们在表中只有两个字段,因此 { day} 上的二级索引也将覆盖它们user_id,从而避免在聚集表中可能发生的双重查找。实际上,无论您访问其中哪一个(这很好),您最终都会得到两个独立(但同步)的 B 树和一个仅索引扫描。当然,您可以在 { day, user_id} 上显式创建复合索引,而不仅仅是 {day},以获得非常相似的效果。

于 2012-10-26T13:41:45.580 回答