我可以通过将一个大表分成许多小表来优化我的数据库吗?

Rom*_*man 6 mysql optimization split

假设我有一个包含三列的大表:"user_name","user_property","value_of_property".Lat也假设我有很多用户(比如10万)和很多属性(比方说10 000).然后桌子将是巨大的(10亿行).

当我从表中提取信息时,我总是需要有关特定用户的信息.所以,我用,例如where user_name='Albert Gates'.因此,每次mysql服务器需要分析10亿行时,找到包含"Albert Gates"作为user_name的那些行.

将大表拆分成与固定用户相对应的许多小表是不明智的?

Mar*_*ers 5

不,我认为这不是一个好主意.更好的方法是在列上添加索引user_name - 也许(user_name, user_property)是查找单个属性的另一个索引.然后数据库不需要扫描所有行 - 它只需要在索引中找到存储在B树中的相应条目,这样可以在很短的时间内轻松找到记录.

如果你的应用程序即使在正确编制索引后仍然很慢,有时最好对最大的表进行分区.

您可以考虑的另一件事是规范化您的数据库,以便user_name存储在一个单独的表中,并在其位置使用整数foriegn键.这可以降低存储要求并可以提高性能.同样适用于user_property.