我需要在生产环境中创建一个MySQL临时表
。该表最多可以包含一列超过 50 万条记录。通常,它会在数千条记录左右。
我有几个问题
- 可以在生产数据库服务器中创建临时表吗 环境
- 在同一 MySQL 客户端 session 中,这可能会对性能产生什么影响
- 如果我将数据存储在光盘而不是内存中,是否能够减少性能影响
- 任何优雅的解决方案来代替这个
最佳答案
正如其他人所说,您没有提供大量上下文,因此“视情况而定”。
我非常笼统地说,创建表并在其中存储数据是关系数据库的设计目的。无论是一行还是数百万行,关系数据库都喜欢数据,并且非常擅长优化存储和访问 - 在这方面您不可能比 MySQL 做得更好。
但是...所有服务器在某种程度上都受到资源限制。生产服务器通常具有奇怪的、不可预测的使用模式;月末对账运行、某个部门或用户类型突然爆发的事件、周五下午的报告运行,现实世界似乎并不按照可预测的时间表运行。
同样,在非常一般的情况下,数据库服务器往往具有“曲棍球棒”性能曲线 - 只要您没有遇到某些资源瓶颈,响应时间就会随着使用情况而大幅增加。然后,当您遇到瓶颈(通常是 CPU、RAM 或磁盘访问)时,您会看到响应时间急剧增加的向上拐点。
如果您的生产服务器在现实世界不可预测的峰值之一期间接近达到该瓶颈点,那么您添加到该服务器的任何内容(包括临时表)都可能触发拐点。因此,请询问了解生产环境的人,生产服务器在高峰时段的负载有多大。
下一个问题是创建和存储数据通常不是性能问题 - 但查询数据可能是性能问题(并且运行缓慢的查询会占用大量资源,从而影响其他进程和用户)。我猜你不只是存储数据,你还在用它做一些事情;如果速度缓慢或资源密集,则可能会产生可衡量的影响。调整和优化查询(在单独的环境中!),确保您的 EXPLAIN 显示您正在对所有内容使用索引,并且查询会在几毫秒内返回,并且您可能没问题。
有没有更优雅的解决方案?是的,您可以将数据移动到单独的“报告”服务器,在那里您可以执行临时表支持的任何处理。
关于mysql - 生产环境创建MySQL数据表即可,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56164796/