我正在为我的MySQL表做索引吗?

时间:2013-05-05 06:30:35

标签: mysql indexing database-performance

我有一个MySQL表,其中包含一个消息列表,其中每条消息都属于一个房间。我做这样的查询:

SELECT * FROM messages WHERE room='offtopic' ORDER BY id DESC LIMIT 5;

由于我的表已增加到数十万条消息的数量,因此数据库变得有点慢。我添加了一个名为room的索引,BTREE,不是唯一的,没有打包的,列室(5),现在基数为425.

这有助于提高性能吗?阿卡,我做得对吗?

1 个答案:

答案 0 :(得分:2)

是的, 特定查询几乎肯定是一个好主意,因为你没有显示它们,所以不能说其他查询。

通过在room列上添加索引,它应该能够更有效地在流程的早期折扣大部分表,使用索引丢弃房间不是什么的每一行你要。基数为425(通常是估计值)意味着索引中有许多唯一值,因此它将成为您的起点(400多行),而不是您提到的数十万行。

但基本的想法是在类似生产环境中运行查询以查看它们的执行情况(使用explain),然后添加索引并再次尝试查看排序你得到的改善。

优化是一个愚蠢的差事,没有衡量。我在这个问题上听过的最好的口头禅是“测量,不要猜测”。