我可以使用几个“类似”的数据库表来减少检索时间

时间:2013-10-28 23:27:19

标签: mysql database performance database-design scalability

最好用具体的例子来解释我的问题。

考虑餐馆用来接收客户订单的订单管理应用程序。我有一个名为orders的表,它存储了所有这些。

现在每天桌子的大小都在增加,但访问的数据量是不变的。一般来说,餐厅只对最近一天收到的订单感兴趣。例如,100天之后,“有趣”数据仅占表格大小的1/100; 1年后它是1/365,依此类推。

当然,我想保留所有旧订单,但仅对当前订单感兴趣的应用程序的性能会不断下降。那么,没有旧数据干扰“有趣”数据的最佳方法是什么?

根据我有限的数据库知识,我遇到的一个解决方案是在同一个数据库中有两个相同的表 - order_present和order_past。新订单将进入'order_present',而cron作业会将所有超过两天的已处理订单转移到'order_old',保持'order_present'的大小不变。

这被认为是解决这个问题的可接受的解决方案。还有哪些其他解决方案?

1 个答案:

答案 0 :(得分:1)

数据库服务器非常擅长处理卷。但性能可能会受到物理硬件的限制。如果是困扰您的IO延迟,可以使用多种解决方案。你真的需要评估什么最适合你的用例。

例如:

  1. 您可以Partition将表格分发到多个物理磁盘上。
  2. 您可以Sharding将数据放到不同的物理服务器上
  3. 您可以使用最适合您的数据和应用的其他Storage Engine进行评估。与InnoDB相比,MyISAM提供了更好的读取性能,但代价是降低了ACID标准
  4. 您可以使用Read Replicas将所有(大多数)“选择”查询转发到主数据库服务器(主服务器)的副本(从属)
  5. 最后,MySQL Performance Blog是此主题的绝佳资源。