最好用一个具体的例子来解释我的问题。
考虑一个订单管理应用程序,餐馆使用它来接收顾客的订单。我有一张叫“订单”的桌子,里面存放着所有的东西。
现在,表的大小每天都在增长,但访问的数据量是恒定的。一般来说,餐馆只对最后一天左右收到的订单感兴趣。例如,100天之后,“有趣”的数据只有表大小的1/100;1年之后是1/365,以此类推。
当然,我想保留所有的旧订单,但是只对当前订单感兴趣的应用程序的性能会不断降低。那么,让旧数据不干扰“有趣”的数据的最佳方法是什么?
根据我有限的数据库知识,我想到的一个解决方案是在同一个数据库中有两个相同的表-order_present和order_past。新订单将变成“order_present”,cron作业将把所有处理时间超过两天的订单转移到“order_old”,保持“order_present”的大小不变。
这被认为是处理这个问题的一个可接受的解决方案吗。还有其他解决方案吗?
最佳答案
数据库服务器非常擅长处理卷。但性能可能会受到物理硬件的限制。如果是IO延迟困扰您,有几种解决方案可用。你真的需要评估什么最适合你的用例。
例如:
您可以Partition将表分发到多个物理磁盘上。
您可以执行Sharding将数据放到不同的物理服务器上
您可以使用另一个最适合您的数据和应用程序的Storage Engine进行评估。与InnoDB相比,MyISAM提供了更好的读取性能,但代价是不太符合ACID
您可以使用Read Replicas将所有(大多数)“select”查询从主数据库服务器(master)的副本(slaves)中删除
最后,MySQL Performance Blog是这个主题的一个很好的资源。
关于mysql - 我可以有几个“相似”数据库表来减少检索时间吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19646956/