MySQL的性能问题在我的脑海里

时间:2018-01-17 11:51:28

标签: mysql database performance server

首先,我不是一个非常有经验的开发人员,我正在用PHP,MySQL和Javascript制作中型应用程序。

有一些东西让我很难在每个项目之前设计一个MySQL InnoDB数据库。这就是性能。我总是非常担心我是否正在创建一个规范化的数据库方案,当我必须将几个表(如5-6)连接在一起时(那里)通常是它们之间的一些多对多,多对一的关系)当这些5-6个表中的每一个都有大约100k行时,它会影响性能很多(负数)。

我通常拥有的这些项目正在创建分析平台。因此,我总共预计会有大约100万次点击,我通常必须将此表连接到许多其他人(每行大约10万行)才能显示一些数据。我通常会对点击进行汇总表,但对其他表不能做同样的事情。

我不太确定我是否必须担心此阶段的未来表现。目前,我正在积极管理其中一些应用程序,其中包含30M +点击和表格,我加入到具有40k +行的Clicks表格。性能非常差 - 选择操作通常需要10到20多秒才能完成,而我相信我有正确的索引,innodb_buffer_pool_size也是如此。

我已经阅读了很多关于设计优化数据库的关键。这就是为什么我在创建它之前通常会考虑数据库方案。

我是否真的不得不担心创建数据库方案,我必须加入5-6对多对多对多对/一对多表,这很常见,MySQL应该能够轻松处理这种负荷?

在创建数据库方案之前还有其他什么需要考虑吗?

我通常的服务器设置是拥有一个带4GB RAM + 2个vCPU的MySQL服务器,为数据库和一个4GB RAM + 2个vCPU的WebServer提供服务。他们都使用Ubuntu的16.04版本并使用最新的MySQL(5.7.21)和PHP7-fpm。

1 个答案:

答案 0 :(得分:1)

戈登是对的。 RDBMS用于处理您的工作负载。

如果您正在使用虚拟机(云等)来托管您的资料,您通常可以通过花费更多资金来增加RAM,vCPU数量和IO容量。但是,通常情况下,向DBMS性能问题投入资金并不比向他们投入更好的指标更有帮助。

在100M行的规模下,查询性能是一个合理的问题。随着项目的开发,您将需要重新访问DBMS索引以优化您实际使用的查询。所以计划一下。问题是,在获得大量数据之前,您不能也不会知道您的实际性能问题。

阅读本文以预览即将发生的事情:https://use-the-index-luke.com/

一条建议:分区表通常不会解决性能问题,除非在非常特殊的情况下。

查找这个缩写词:YAGNI。

去做你的项目。花费你现在的努力让它发挥作用。