我有一个表/架构,其中两列名为日 DateTime , user_id 整数。知道我把两列都编入索引。
索引的性能改进是否值得,考虑到索引使用的大量额外空间而且只有两列?你怎么为他们辩护?
如果我使用MongoDB或MySQL,这有何不同?
答案 0 :(得分:2)
如果行数很少,您可能看不到索引的重大改进。如果有很多行,你可能会看到很大的改进。
好消息是你不必猜测,并且你不必为实践中少数和许多的含义而苦恼。每个现代SQL dbms都包含一些衡量SELECT语句性能的方法。这包括MySQL。
答案 1 :(得分:1)
索引的性能改进值得吗?
取决于您打算运行的查询。
WHERE day = ...
的内容,那么你需要一个前沿包含day
的索引。如果使用得当,索引可以加速查询许多数量级,特别是在大型数据集上。在一天结束时,我建议您衡量关于实际数据量并得出您自己的结论。
BTW,如果您使用的是InnoDB,那么您的表格为clustered(另请参阅:Understanding InnoDB clustered indexes),整个表格实际存储在主索引中。群集表中的二级索引包含PK字段的副本,在这种情况下(我假设)是user_id
。由于表中只有两个字段,{day
}上的二级索引也会覆盖user_id
,从而避免了在群集表中可能发生的双重查找。实际上,无论您访问哪一个(哪个好),您最终都会得到两个独立的(但已同步的)B树和一个index-only scan。当然,您可以在{day
,user_id
}而不仅仅是{day
}上明确制作综合索引,效果非常相似。