最好用一个具体的例子来解释我的问题。
考虑一个餐厅用来接收客户订单的订单管理应用程序。我有一个名为 orders 的表,其中存储了所有订单。
现在,表格的大小每天都在增加,但访问的数据量是恒定的。一般来说,餐厅只对最近一天左右收到的订单感兴趣。例如,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将所有(大多数)“选择”查询委托(delegate)给主数据库服务器(主)的副本(从属)
最后,MySQL Performance Blog是有关此主题的重要资源。
关于mysql - 我可以有几个 'similar' 数据库表来减少检索时间吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646956/