mysql - 我可以有几个 'similar' 数据库表来减少检索时间吗

标签 mysql database performance database-design scalability

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

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

现在,表格的大小每天都在增加,但访问的数据量是恒定的。一般来说,餐厅只对最近一天左右收到的订单感兴趣。例如,100 天后,“有趣”的数据大约只有表大小的 1/100; 1 年后是 1/365 等等。

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

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

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

最佳答案

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

例如:

  1. 你可以Partition表以将其分布到多个物理磁盘上。
  2. 你可以做到Sharding将数据放到不同的物理服务器上
  3. 您可以使用另一个 Storage Engine 进行评估最适合您的数据和应用程序。与 InnoDB 相比,MyISAM 以较少的 ACID 合规性为代价提供了更好的读取性能
  4. 你可以使用Read Replicas将所有(大多数)“选择”查询委托(delegate)给主数据库服务器(主)的副本(从属)

最后,MySQL Performance Blog是有关此主题的重要资源。

关于mysql - 我可以有几个 'similar' 数据库表来减少检索时间吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646956/

相关文章:

php - 为什么 fetchObject 函数不起作用?

SQL 连接类型和性能 : Cross vs Inner

c# - 如何在sql行中的数字前添加0

php - 按小时对数据库数据进行分组

mysql 安装程序在当前包中没有找到适合安装 windows 的包

mysql - 在 MySQL 数据库中存储图像文件或 URL?哪个更好?

php - 在查询数据库或数据库处理之前检查输入的长度(太大)是否值得?

mysql - 对于以国家和部门为特色的基于运动队的数据库,这是正确的数据库结构吗?

c# - 相对于正确配置的同步模型,异步模型真的能提高吞吐量吗?

ruby-on-rails - rails : Faster way to perform updates on many records