我有一个MySQL表,其中包含一个消息列表,其中每条消息都属于一个房间。我做这样的查询:
SELECT * FROM messages WHERE room='offtopic' ORDER BY id DESC LIMIT 5;
由于我的表已增加到数十万条消息的数量,因此数据库变得有点慢。我添加了一个名为room
的索引,BTREE,不是唯一的,没有打包的,列室(5),现在基数为425.
这有助于提高性能吗?阿卡,我做得对吗?
答案 0 :(得分:2)
是的, 特定查询几乎肯定是一个好主意,因为你没有显示它们,所以不能说其他查询。
通过在room
列上添加索引,它应该能够更有效地在流程的早期折扣大部分表,使用索引丢弃房间不是什么的每一行你要。基数为425(通常是估计值)意味着索引中有许多唯一值,因此它将成为您的起点(400多行),而不是您提到的数十万行。
但基本的想法是在类似生产环境中运行查询以查看它们的执行情况(使用explain
),然后添加索引并再次尝试查看排序你得到的改善。
优化是一个愚蠢的差事,没有衡量。我在这个问题上听过的最好的口头禅是“测量,不要猜测”。